Python Pandas read_csv跳过行但保留标题

时间:2014-12-05 22:24:33

标签: python csv pandas

我无法弄清楚如何在csv文件中跳过n行,但保留标题为1行。

我想要做的是迭代,但保留第一行的标题。 skiprows使标题成为跳过行之后的第一行。这样做的最佳方式是什么?

data = pd.read_csv('test.csv', sep='|', header=0, skiprows=10, nrows=10)

5 个答案:

答案 0 :(得分:70)

您可以将行号列表传递给skiprows而不是整数。然后,读者将忽略列表中的那些行。

通过给函数提供整数10,你只需要跳过前10行。

要保持第一行0(作为标题)然后跳到第10行,您可以写:

pd.read_csv('test.csv', sep='|', skiprows=range(1, 10))

答案 1 :(得分:3)

要扩展@AlexRiley的答案,skiprows参数采用数字列表,该数字列表确定要跳过的行。所以:

pd.read_csv('test.csv', sep='|', skiprows=range(1, 10))

与以下相同:

pd.read_csv('test.csv', sep='|', skiprows=[1,2,3,4,5,6,7,8,9])

忽略特定行的最佳方法是创建忽略列表(手动创建或使用range之类的函数返回整数列表)并将其传递给skiprows。 / p>

答案 2 :(得分:3)

已经有了很好的答案。.我不知何故在这里需要添加广义形式。.考虑这种情况:-

假设您的xls / csv的前2行(行#0,1)中有垃圾行。第2行(第3行)是真正的标题,您要从第50行(即第51行)开始加载10行。这是代码段:-

pd.read_csv('test.csv', header=2, skiprows=range(3, 50), nrows=10)

答案 3 :(得分:1)

如果要遍历一个长的csv文件,则可以使用chunksize参数。如果出于某种原因需要手动执行此操作,则可以尝试以下操作,只要知道需要执行多少次迭代即可:

for i in range(num_iters):
    pd.read_csv('test.csv', sep='|', header=0, 
                 skiprows = range(i*10 + 1, (i+1)*10), nrows=10)

答案 4 :(得分:0)

如果您需要跳过/删除特定的行,请说出前3行(即0,1,2),然后再说2行(即4,5)。您可以使用以下内容保留标题行:

df = pd.read_csv(file_in, delimiter='\t', skiprows=[0,1,2,4,5], encoding='utf-16', usecols=cols)