Python Pandas:使用N列读取csv,其中N在另一列中指定
假设我有一个具有以下标题的数据集:Python Pandas:使用N列读取csv,其中N在另一列中指定,python,pandas,Python,Pandas,假设我有一个具有以下标题的数据集: <id> <timestamp> <N> <1> <2> ... <N> 可以保证所有行的列数相同 如何使用Pandasread\u CSV读取此CSV文件并当前标记列?是否可以在一次通话中完成?我正在学习Pandas,所以我想知道Pandas如何完成一项需要多行Python代码才能完成的任务 谢谢你的帮助 编辑: 我试过了 我不知道该把什么放在。。。第部分您不需要指定读取csv
<id> <timestamp> <N> <1> <2> ... <N>
可以保证所有行的列数相同
如何使用Pandasread\u CSV
读取此CSV文件并当前标记列?是否可以在一次通话中完成?我正在学习Pandas,所以我想知道Pandas如何完成一项需要多行Python代码才能完成的任务
谢谢你的帮助
编辑:
我试过了
我不知道该把什么放在。。。第部分您不需要指定读取csv中的列数。你可以打个电话
df = pd.read_csv('file.csv')
它应该读取中的所有列(以及行)。如果愿意,您可以传递
header=0
,但熊猫通常可以推断出这一点。更新:
如果我有几个尾随列,比如 ... , 这里如何使用n的值 如果可以预定义尾随列名,则可以执行以下操作:
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']
旧答案:
我会这样做:
首先读取您的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
到目前为止你尝试了什么,结果如何?如果所有行的列数相同,read_csv函数应该能够正确地读入数据。@Benjamin请参阅我的新编辑。如果您事先不知道有多少列,则在读入数据帧后,只需在下一行代码中命名这些列。您不需要指明列名或列数@ashishsingal指出的专栏。如果csv文件中的分隔符不是逗号(,),则只需指定分隔符
sep=…
。例如:df=pd.read_csv('file.csv',sep=';')
在原始csv数据中,没有标题行。如果我想用值(例如800
)调用名为“count”的列,那么如何为其后面的N列指定列名?如果我有多个尾随列,例如
,如何在此处使用n
的值?@zkytony,您想如何命名后面的列-('max','min')
?这些名称是预定义的吗?因此在分析行时,我们假设最后一列表示“min”,倒数第二列表示“max”。它们将不属于数字索引列的一部分。谢谢
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']
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