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>
可以保证所有行的列数相同

如何使用Pandas
read\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