假设我有一个具有以下标题的数据集:
<id> <timestamp> <N> <1> <2> ... <N>
在此数据集中,每一行都有一列&#34; N&#34;,这是一个数字,用于确定在其后用数字标记的列数。例如,我有一行如下:
5 142323151.14 800 5.3564 5.4534 ... 7.4839 (800 columns after the 3rd column)
保证所有行都具有相同的列数。
如何使用Pandas read_csv
阅读此CSV文件并立即标记列?是否可以在一次通话中完成?我正在学习Pandas,所以我想知道Pandas如何完成一项需要多行Python代码的任务。
感谢您的帮助!
编辑: 我试过了
pd.read_csv('file.csv', names=['id','timestamp','count',...],
delimiter=' ',
header=None)
我不知道该放什么......部分
答案 0 :(得分:4)
<强>更新强>
如果我有多个尾随列,例如 &LT 1为卤素; &LT 2 - ; ...,你如何在这里使用n的值?
In [320]: df
Out[320]:
0 1 2 3 4 5 6 7 8 9 10 11 12
0 5 1.423232e+08 8 1 2 3 4 5 6 7 8 1000 1000
1 6 1.423236e+08 8 11 22 33 44 55 66 77 88 1000 1000
In [321]: ['id', 'timestamp', 'n'] + (df.columns[3:3+df.iat[0, 2]] - 2).tolist() + [11, 12]
Out[321]: ['id', 'timestamp', 'n', 1, 2, 3, 4, 5, 6, 7, 8, 11, 12]
In [322]: df.columns = ['id', 'timestamp', 'n'] + (df.columns[3:3+df.iat[0, 2]] - 2).tolist() + [11, 12]
In [323]: df
Out[323]:
id timestamp n 1 2 3 4 5 6 7 8 11 12
0 5 1.423232e+08 8 1 2 3 4 5 6 7 8 1000 1000
1 6 1.423236e+08 8 11 22 33 44 55 66 77 88 1000 1000
如果您可以预定义尾随列名称,则可以执行以下操作:
In [328]: trailing_cols = ['max','min']
In [329]: ['id', 'timestamp', 'n'] + (df.columns[3:3+df.iat[0, 2]] - 2).tolist() + trailing_cols
Out[329]: ['id', 'timestamp', 'n', 1, 2, 3, 4, 5, 6, 7, 8, 'max', 'min']
OLD回答:
我这样做:
首先阅读您的CSV而不指定列名:
df = pd.read_csv('file.csv', delim_whitespace=True, header=None)
In [271]: df
Out[271]:
0 1 2 3 4 5 6 7 8 9 10
0 5 1.423232e+08 800 1 2 3 4 5 6 7 8
1 5 1.423232e+08 800 11 22 33 44 55 66 77 88
现在我们可以按如下方式重命名列:
In [272]: df.columns = ['id', 'timestamp', 'n'] + (df.columns[3:].values - 2).tolist()
In [273]: df
Out[273]:
id timestamp n 1 2 3 4 5 6 7 8
0 5 1.423232e+08 800 1 2 3 4 5 6 7 8
1 5 1.423232e+08 800 11 22 33 44 55 66 77 88
答案 1 :(得分:0)
您无需在read_csv中指定列数。你可以打电话
df = pd.read_csv('file.csv')
它应该读取(和行中的所有列)。如果你愿意,你可以传递header=0
,但是大熊猫通常可以推断出这一点。