小编use*_*867的帖子

替换非字母数字字符,除了一些例外python

在perl s/[^\w:]//g中将替换所有非字母数字字符除外:

在python我正在使用re.sub(r'\W+', '',mystring) 它删除除_下划线之外的所有非字母数字.有没有办法放异常,我希望不要替换像=和.

以前我正在应用另一种方法,即使用re.sub('[!@#\'\"$()]','',mystring` 替换所有不需要的字符.但是,我不可能预测mystring中所有字符的内容因此我希望删除所有非字符串除少数字母数字字符外的字母数字字符.

谷歌没有提供适当的答案.最接近的搜索是python正则表达式拆分任何\ W +有一些例外,但这也没有帮助我.

python regex alphanumeric

9
推荐指数
3
解决办法
1万
查看次数

灵活应用

我在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范围内。

r sapply

7
推荐指数
2
解决办法
6201
查看次数

仅对熊猫中的数字列求和

我有一个如下所示的 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 位。附加:完成此操作后,我将添加最后一行作为中位数行,每列都有中位数

python pandas

6
推荐指数
2
解决办法
3347
查看次数

groupby 并返回前 n 组的所有行

我有一个如下所示的熊猫数据框

>>> 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 …

python pandas pandas-groupby

5
推荐指数
1
解决办法
1924
查看次数

仅将日期时间列与熊猫中的时间进行比较

我有一个像下面这样的 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格式(注意 …

python datetime pandas

5
推荐指数
2
解决办法
1万
查看次数

以多列作为键的映射数据框熊猫

>>> 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 pandas

3
推荐指数
1
解决办法
2039
查看次数

python ssl错误违反协议

我正在尝试使用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)

python ssl https python-2.7

2
推荐指数
1
解决办法
6124
查看次数

使用 pd.grouper 每 n 分钟进行分组

我有一个如下所示的数据框,我想按类分组,子类描述每个小时间隔的 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)

pandas pandas-groupby

2
推荐指数
1
解决办法
2752
查看次数

pandas 中具有字符串和数字的总列

我需要对第一行包含字符串的列和 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']

pandas

2
推荐指数
1
解决办法
2341
查看次数

使用 xargs 参数两次

我需要检查本地文件是否与远程主机文件相同。

文件位置如下: 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 的输出?

sed remote-access xargs

1
推荐指数
1
解决办法
2299
查看次数

比较 R 中的纳秒精度时间戳

虽然这是一个非常常见的实用程序,许多人可能需要它,但奇怪的是谷歌没有向我显示任何匹配的答案。我有一个时间戳,格式HH:MM:SS.NANOSECONDPRECISION为秒后 9digits。我在 R 中有 2 个这样的列,我需要找出不同之处。我无法找到如何使用 POSIX 将此类字符时间戳转换为可比较的数字。

发送时间 - 11:20:30.791372292 接收时间 11:20:30.791382216 找到这两个时间戳之间差异的好方法是什么

timestamp r

1
推荐指数
1
解决办法
772
查看次数