gpt4 book ai didi

python - 简化 python/pandas 代码

转载 作者:太空宇宙 更新时间:2023-11-03 14:14:05 25 4
gpt4 key购买 nike

我的数据如下所示:

1516268134      49.95   99.982  49.95   0       0       0       0       0       0       01516268134      49.95   99.966  49.95   0       0       0       0       0       0       01516268134      49.95   100.28  49.95   0       0       0       0       0       0       01516268134      49.95   100.01  49.95   0       0       0       0       0       0       01516268134      49.95   100.10  49.95   0       0       0       0       0       0       01516268134      49.95   99.773  49.95   0       0       0       0       0       0       01516268134      49.95   99.246  49.95   0       0       0       0       0       0       01516268134      49.95   144.89  49.95   0       0       0       0       0       0       01516268135      49.95   55.700  49.95   0       0       0       0       0       0       01516268135      49.95   99.441  49.95   0       0       0       0       0       0       0

第2、3、4列是 float ,其余是整数。分隔符是制表符。

我需要取 N 行,并计算最小值/平均值/最大值,例如

1516268134      49.950  55.700  49.950  0       0       0       0       0       0       01516268134      49.950  99.939  49.950  0       0       0       0       0       0       01516268135      49.9500 144.890 49.950  0       0       0       0       0       0       0

同样,第二、第三和第四列是 float ,其余的必须是整数。分隔符仍然是制表符。

代码如下所示:

import sysimport pandasfile=open(sys.argv[2], "w")for data in pandas.read_table(sys.argv[1], delim_whitespace=True, header=None, chunksize=int(sys.argv[3])):  file.write("%d\t%f\t%f\t%f\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n" % (data[0].min(),  data[1].min(),  data[2].min(),  data[3].min(),  data[4].min(),  data[5].min(),  data[6].min(),  data[7].min(),  data[8].min(),  data[9].min(),  data[10].min()))  file.write("%d\t%f\t%f\t%f\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n" % (data[0].mean(), data[1].mean(), data[2].mean(), data[3].mean(), data[4].mean(), data[5].mean(), data[6].mean(), data[7].mean(), data[8].mean(), data[9].mean(), data[10].mean()))  file.write("%d\t%f\t%f\t%f\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n" % (data[0].max(),  data[1].max(),  data[2].max(),  data[3].max(),  data[4].max(),  data[5].max(),  data[6].max(),  data[7].max(),  data[8].max(),  data[9].max(),  data[10].max()))file.close()

我想让代码更短、看起来更好(并且更容易理解和维护)。

尝试将 11x data[X].FUNC() 替换为单个 data.FUNC(),但这给了我错误“TypeError:%d 格式:需要数字,而不是系列”。

我尝试的下一件事是 data.FUNC().convert_objects(convert_numeric=True) 但这给了我同样的错误。

如何更换

data[0].max(),  data[1].max(),  data[2].max(),  data[3].max(),  data[4].max(),  data[5].max(),  data[6].max(),  data[7].max(),  data[8].max(),  data[9].max(),  data[10].max()

用一些简短的内容,并在数据中保留 float/int 格式?

我一直在寻找将 data.FUNC() 转换为 11 个单独数字的解决方案,但失败了。

-帕沃

最佳答案

read_table 中的第一个默认分隔符是 tab,所以应该省略:

然后使用 aggregateapplylist 中使用聚合函数:

df = pd.read_table('filename', header=None)

df = df.agg(['min','mean','max'])
#Alternatively:
#df = df.apply(['min','mean','max'])

print (df)
0 1 2 3 4 5 6 7 8 9 10
min 1.516268e+09 49.95 55.7000 49.95 0.0 0.0 0.0 0.0 0.0 0.0 0.0
mean 1.516268e+09 49.95 99.9388 49.95 0.0 0.0 0.0 0.0 0.0 0.0 0.0
max 1.516268e+09 49.95 144.8900 49.95 0.0 0.0 0.0 0.0 0.0 0.0 0.0

最后如果需要将数据附加到最终文件使用 DataFrame.to_csvmode='a':

df.to_csv('filename1',index=False, header=None, mode='a', sep='\t')

一起:

file=open(sys.argv[2], "w")

for data in pd.read_table(sys.argv[1], header=None, chunksize=int(sys.argv[3])):
data = data.agg(['min','max','mean'])
data.to_csv('filename1',index=False, header=None, mode='a', sep='\t')

关于python - 简化 python/pandas 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48318813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com