在perl s/[^\w:]//g
中将替换所有非字母数字字符除外:
在python我正在使用re.sub(r'\W+', '',mystring)
它删除除_下划线之外的所有非字母数字.有没有办法放异常,我希望不要替换像=和.
以前我正在应用另一种方法,即使用re.sub('[!@#\'\"
$()]','',mystring` 替换所有不需要的字符.但是,我不可能预测mystring中所有字符的内容因此我希望删除所有非字符串除少数字母数字字符外的字母数字字符.
谷歌没有提供适当的答案.最接近的搜索是python正则表达式拆分任何\ W +有一些例外,但这也没有帮助我.
我在tmp目录中有一个.stat文件列表。
样品:
a.stat =>
abc,10
abc,20
abc,30
Run Code Online (Sandbox Code Playgroud)
b.stat =>
xyz,10
xyz,30
xyz,70
Run Code Online (Sandbox Code Playgroud)
等等
我需要找到所有.stat文件的摘要。目前我正在使用
filelist<-list.files(path="/tmp/",pattern=".stat")
data<-sapply(paste("/tmp/",filelist,sep=''), read.csv, header=FALSE)
但是,我需要对正在读取的所有文件应用摘要。或者只是在n个.stat文件中,我需要第二列的摘要
使用
data<-sapply(paste("/tmp/",filelist,sep=''), summary, read.csv, header=FALSE)
不起作用,并给我带有班级角色的摘要,这不是我想要的。
sapply(filelist, function(filename){df <- read.csv(filename, header=F);print(summary(df[,2]))})
工作正常。但是,我的总体目标是找到两边(异常值)相差超过2个标准偏差的值。因此,我使用sd,但同时需要检查当前读取的文件中的所有值是否都在2SD范围内。
我有一个如下所示的 df,(前 2 行是文本,第一列是日期)
In [4]: df
Out[4]:
test bs dv if ir md qb sy tb
0 TESTacc a10900 a10900 a10900 IJJMKK11 a10900 a10900 a10900 a10900
1 01-Feb-2019 18.8668013 4.6021207 0.9330807 13.9766832 2.9002571 0.2824343 0.8280988 0.8587644
2 04-Feb-2019 16.187526 3.1000162 0.4145835 14.6465183 2.848472 0.2516608 0.8618771 0.218063
Run Code Online (Sandbox Code Playgroud)
我需要得到这个具有 3 个小数精度的 csv 另外我需要添加一个“总计”列(最右边的列)我已经尝试了以下内容,但这些都不正确
要添加我所做的总列:
ndf=df.iloc[2:,1:] #take only numerics in ndf
ndf = ndf.apply(pd.to_numeric)
ndf=ndf.round(3)
df['total']=ndf.sum(axis=1)
Run Code Online (Sandbox Code Playgroud)
这不是做简单的事情的正确方法,比如添加一个总列
所以我尝试过,
df=df.apply(pd.to_numeric,errors='ignore')
但 round 仍然无法在 df 上工作我的意图是只添加一个 Total 列并将所有数字四舍五入到小数点后 3 位。附加:完成此操作后,我将添加最后一行作为中位数行,每列都有中位数
我有一个如下所示的熊猫数据框
>>> df.head()
0 1 2 3 4 5 6
0 35000 26009 OPTIDX BANKNIFTY XX 1499351400 BANKNIFTY1770621000CE
1 35001 26009 OPTIDX BANKNIFTY XX 1499351400 BANKNIFTY1770621000PE
2 35002 26000 OPTIDX NIFTY XX 1609425000 NIFTY20DEC10400CE
3 35003 26000 OPTIDX NIFTY XX 1609425000 NIFTY20DEC10400PE
4 35004 26009 OPTIDX BANKNIFTY XX 1499956200 BANKNIFTY1771321100CE
Run Code Online (Sandbox Code Playgroud)
我想按排序顺序按第 5 列对它们进行分组,并返回前 n 个组,其中 n 可以作为变量给出。
我df.sort_values(5).groupby([5])
得到了<pandas.core.groupby.DataFrameGroupBy object at 0x2afc8d0>
如何获取前 2 组中的所有行。在示例 df 中,第 1 组为 1499351400,第 2 组为 1499351400,第 3 组为 1609425000
预期输出:需要组时 =2 …
我有一个像下面这样的 df
col1, mydate
1, 25-DEC-2016 09:15:00
2, 25-DEC-2016 10:14:00
3, 25-DEC-2016 10:16:00
4, 25-DEC-2016 10:18:56
2, 25-DEC-2016 11:14:00
2, 25-DEC-2016 10:16:00
df.info(): mydate 323809 non-null object
Run Code Online (Sandbox Code Playgroud)
我需要根据时间使用此数据框,例如 df 的时间小于 10:15:00,df 的时间小于 11:15:00
所以创建了我的切片间隔使用
times=[pd.to_datetime(i) for i in '10:15:00','11:15:00','12:15:00','13:15:00','14:15:00','15:15:00', '15:30:00']
Run Code Online (Sandbox Code Playgroud)
然后我将 mydate 类型转换为时间,这需要很多时间
df['mydate']=df4.mydate.apply(lambda x: pd.to_datetime(x,infer_datetime_format=True).time())
Run Code Online (Sandbox Code Playgroud)
我认为可以优化上述命令,或者应该有更好/更快的方法。
然后我简单地做
for time in times:
slice = df[df.mydate<time.time()]
Run Code Online (Sandbox Code Playgroud)
我的目的只是将 df.mydate 时间与['10:15:00','11:15:00','12:15:00','13:15:00','14:15:00','15:15:00', '15:30:00']
(但不是日期)进行比较,并简单地将 df 子集
上述方法对我来说很好,但我正在寻找更好的方法。
附加:有趣的是排序 mydate 非常快(即使我没有将 mydate col 转换为 datetime)使用
df.sort_values(by='mydate')
Run Code Online (Sandbox Code Playgroud)
这让我认为我的子集方式应该更快。
mydate col 将始终采用25-DEC-2016 09:15:00
格式(注意 …
>>> p1.head()
StreamId Timestamp SeqNum
0 3 1490250116391063414 1158
1 3 1490250116391348339 3600
2 3 1490250116391542829 3600
3 3 1490250116391577184 1437
4 3 1490250116392819426 1389
>>> oss.head()
OrderID Symbol Stream SeqNo
0 5000000 AXBANK 3 1158
1 5000001 AXBANK 6 1733
2 5000002 AXBANK 6 1244
3 5000003 AXBANK 6 1388
4 5000004 AXBANK 3 1389
Run Code Online (Sandbox Code Playgroud)
如何使用 2 个属性作为键(SeqNum 和 StreamId)进行合并
>>> merge
OrderID Symbol Stream SeqNo Timestamp
0 5000000 AXBANK 3 1158 1490250116391063414
1 5000001 AXBANK 6 1733 NaN …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用python登录并下载一些文件,使用代码:
import sys
import urllib
import urllib2
import httplib, ssl, socket
class HTTPSConnectionV3(httplib.HTTPSConnection):
def __init__(self, *args, **kwargs):
httplib.HTTPSConnection.__init__(self, *args, **kwargs)
def connect(self):
sock = socket.create_connection((self.host, self.port), self.timeout)
if self._tunnel_host:
self.sock = sock
self._tunnel()
try:
self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file, ssl_version=ssl.PROTOCOL_SSLv3)
except ssl.SSLError, e:
print("Trying SSLv3.")
#self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file, ssl_version=ssl.PROTOCOL_TLSv1)
self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file, ssl_version=ssl.PROTOCOL_SSLv23)
class HTTPSHandlerV3(urllib2.HTTPSHandler):
def https_open(self, req):
return self.do_open(HTTPSConnectionV3, req)
# install opener
urllib2.install_opener(urllib2.build_opener(HTTPSHandlerV3()))
if __name__ == "__main__":
##fill the login form
query={}
query['username']='USER'
query['password']='007' …
Run Code Online (Sandbox Code Playgroud) 我有一个如下所示的数据框,我想按类分组,子类描述每个小时间隔的 D 列
A,B,C,D
06-JUL-2017 09:15:00,class1,subclass1,3
06-JUL-2017 09:16:00,class1,subclass2,4
06-JUL-2017 10:15:00,class2,subclass1,5
06-JUL-2017 10:17:00,,class2,subclass2,7
Run Code Online (Sandbox Code Playgroud)
我用了 :
`df.groupby(['B','account'],pd.Grouper(freq='60T'))['D'].describe().astype(int)`
Run Code Online (Sandbox Code Playgroud)
但我如何告诉 Groper 它必须从 A 列中获取时间,然后应用 60T 的频率间隔。
预期操作:(类似于)
class1 subclass1 9:15
10:15
subclass2 9:15
10:15
class2 subclass1 9:15
10:15
subclass2 9:15
subclass2 10:15
Run Code Online (Sandbox Code Playgroud)
我尝试了times = pd.to_datetime(df.A)
这需要一些时间(也许因为有多个相同的时间戳,如 9:15:00、9:15:00),然后我尝试了df.groupby(['B','C'],pd.Grouper(level=times,freq='15T'))['D'].describe().astype(int)
我需要对第一行包含字符串的列和 b 列求和
>>> df
a b
0 c d
1 1 2
2 3 4
>>> df['sum'] = df.sum(1)
>>> df
a b sum
0 c d cd
1 1 2 3
2 3 4 7
Run Code Online (Sandbox Code Playgroud)
我只需要添加数值并获得类似的输出
>>> df
a b sum
0 c d "dummyString/NaN"
1 1 2 3
2 3 4 7
Run Code Online (Sandbox Code Playgroud)
我只需要添加一些列
df['sum']=df['a']+df['b']
我需要检查本地文件是否与远程主机文件相同。
文件位置如下: File1 at Local machine ./remotehostname/home/a/b/scripts/xyz.cpp
远程计算机上的 File2 远程主机名:/home/a/b/scripts/xyz.cpp
我打算使用命令比较这两个文件
diff ./remotehostname/home/a/b/scripts/xyz.cpp remotehostname:/home/a/b/scripts/xyz.cpp
find . -type f | grep -v .svn |xargs -I % diff %
Run Code Online (Sandbox Code Playgroud)
我需要更改 % 以获取远程主机并比较文件。不知道如何在 % 上应用 sed。或者有没有更好的方法来比较这些文件。
一种方法可能是保存文件列表,然后在该文件上应用 sed,但我认为应该有更好的方法。此外,差异在远程主机上不起作用,也许我需要使用干 rsync 的输出?
虽然这是一个非常常见的实用程序,许多人可能需要它,但奇怪的是谷歌没有向我显示任何匹配的答案。我有一个时间戳,格式HH:MM:SS.NANOSECONDPRECISION
为秒后 9digits。我在 R 中有 2 个这样的列,我需要找出不同之处。我无法找到如何使用 POSIX 将此类字符时间戳转换为可比较的数字。
发送时间 - 11:20:30.791372292 接收时间 11:20:30.791382216 找到这两个时间戳之间差异的好方法是什么