我想过滤掉字符串长度不等于10的数据.
如果我试图过滤掉列A或B的字符串长度不等于10的任何行,我试过这个.
df=pd.read_csv('filex.csv')
df.A=df.A.apply(lambda x: x if len(x)== 10 else np.nan)
df.B=df.B.apply(lambda x: x if len(x)== 10 else np.nan)
df=df.dropna(subset=['A','B'], how='any')
Run Code Online (Sandbox Code Playgroud)
这工作缓慢,但工作正常.
但是,当A中的数据不是字符串而是数字(当read_csv读取输入文件时解释为数字)时,它有时会产生错误.
File "<stdin>", line 1, in <lambda>
TypeError: object of type 'float' has no len()
Run Code Online (Sandbox Code Playgroud)
我相信应该有更有效和优雅的代码而不是这个.
我想合并2个数据帧与广播关系:没有公共索引,只想找到2个数据帧中的所有行对.所以想要使N行数据帧x M行dataframe = N*M行数据帧.有没有规则可以在不使用itertool的情况下实现这一目标?
DF1=
id quantity
0 1 20
1 2 23
DF2=
name part
0 'A' 3
1 'B' 4
2 'C' 5
DF_merged=
id quantity name part
0 1 20 'A' 3
1 1 20 'B' 4
2 1 20 'C' 5
3 2 23 'A' 3
4 2 23 'B' 4
5 2 23 'C' 5
Run Code Online (Sandbox Code Playgroud) VS 代码jupyter扩展允许jupyter使用令牌身份验证连接到远程服务器。
http://X.Y.196.198:8888/?token=abcdefgxxxx
但是我团队的jupyter服务器配置为允许通过密码访问。在这种情况下,我如何连接到服务器?
authentication passwords token visual-studio-code jupyter-notebook
我想分组时间戳(日期)并通过时间戳访问每个组,时间戳看起来不正常.看起来组键被奇怪地索引为不同的格式.
df= pd.DataFrame({'DATE' : ['10-Oct-2013', '10-Oct-2013', '10-Oct-2013', '11-Oct-2013', '11-Oct-2013', '11-Oct-2013'],'VAL' : [1,2,3,4,5,6]})
>>> df
DATE VAL
0 10-Oct-2013 1
1 10-Oct-2013 2
2 10-Oct-2013 3
3 11-Oct-2013 4
4 11-Oct-2013 5
5 11-Oct-2013 6
dfg=df.groupby(df['DATE'].apply(lambda x: pd.to_datetime(x)))
>>> dfg.groups.keys()
[numpy.datetime64('NaT'), numpy.datetime64('2013-10-10T17:00:00.000000000-0700'), numpy.datetime64('2013-10-09T17:00:00.000000000-0700')]
for d in dfg.groups.keys():
try:
print d,dfg.get_group(d).describe()
except:
print 'err'
>>
NaT err
2013-10-10T17:00:00.000000000-0700 err
2013-10-09T17:00:00.000000000-0700 err
rng = pd.to_datetime(pd.date_range('10/10/2013', periods=3, freq='D'))
for d in rng:
try:
print d,dfg.get_group(d).describe()
except:
print 'err'
2013-10-10 00:00:00 err
2013-10-11 00:00:00 err …Run Code Online (Sandbox Code Playgroud) x = [1, 2, 3, ... ]
y = sum(x)
Run Code Online (Sandbox Code Playgroud)
总和x是2165496761,它大于32位整数的限制因此sum(x)返回-2129470535.
如何通过将其转换为长整数来获得正确的值?
这是我的导入列表:
import math, csv, sys, re, time, datetime, pickle, os, gzip
from numpy import *
Run Code Online (Sandbox Code Playgroud) 这是Pandas数据帧我想将1D数据转换为2D数组形式
我如何转换自
'A' 'B' 'C'
1 10 11 a
2 10 12 b
3 10 13 c
4 20 11 d
5 20 12 e
6 20 13 f
to this 2d array as the following
11 12 13
10 a b c
20 d e f
Run Code Online (Sandbox Code Playgroud) 在另一个2元组列表中找到匹配的2元组的最快方法是什么?
以下代码效率极低.loc1和loc2是(x,y)坐标的元组列表.
loc3=[]
for loc in loc1:
if loc in loc2:
loc3.append(loc)
Run Code Online (Sandbox Code Playgroud)
我认为哈希是关键但不确定如何在Python上做到这一点.请教我一个优雅的代码.谢谢.
我正在尝试制作一个快速处理嘈杂的CSV文件的简单脚本.我只想从一个大的CSV文件(gzip)中抓取几列,然后用修剪后的数据写一个新的CSV文件.还添加了一个简单的过滤方法,用于检查列的长度[0] == 15.
我比较了perl,java和python脚本,发现Java比其他语言快得多.我想知道是否有任何其他方法可以优化每种语言的这个简单过程?
每种语言的基准时间是(对于800MByte gzip文件)1.Java:74sec 2.Python:197sec 3. Perl:7分钟
蟒蛇:
import gzip
import csv
import time
def getArray(row):
columns = [0,4,5,26,33,34,35,36,39,41,42,47,54,65,66,72,73,91]
row_filt = []
for i in columns:
row_filt.append(row[i])
return row_filt
filename = 'Very_large_csv.gz'
outfile = filename + '.csv'
csv.register_dialect('wifi', delimiter='|', quoting=csv.QUOTE_NONE, quotechar = '')
start_time = time.time()
try:
f = gzip.open(filename, 'rb')
f2 = open(outfile, 'wb')
reader = csv.reader(f, dialect = 'wifi')
writer = csv.writer(f2, dialect = 'wifi')
header = reader.next()
writer.writerow(getArray(header))
for row in reader:
if (len(row[0]) != …Run Code Online (Sandbox Code Playgroud)