我刚从Python开始使用Pandas,到目前为止非常好。
我有一个大的cvs文件,我想只阅读其中的一部分。通过read_csv文档(link),选项skiprows
会显示:
skiprows:list-like或integer,默认无
要在文件开头跳过(0索引)或要跳过的行数(int)的行号
起初我以为我可以用它来读取我的cvs文件的第一部分,处理它,然后读取第二部分,依此类推。但是,当我读取第二部分时,标题不存在(因为标题行被跳过)。
我尝试header=0
,但正如文档所述:
header = 0表示第一行数据而不是文件的第一行。
然后我看到它可以读取文件块。听起来不错,但文档对我来说并不是那么清楚,所以这是我的问题:
read_csv
命令与skiprows
选项一起使用,并仍然在文件的第一行读取头部? (我仍然可以打开文件,阅读第一行并将其用作names
选项中的标题,但我不是很喜欢这个。)答案 0 :(得分:1)
数目:
对于问题3,您可以使用以下内容来保留标题的第一行:
pd.read_csv('test.csv', skiprows=range(1, 10))
正如@iled在评论中指出的那样,看看带有块的示例。例如:
import pandas as pd
import numpy as np
from io import StringIO
np.random.seed(10)
df1 = pd.DataFrame(np.random.randn(10,5), columns=['a','b','c','d','e'])
In [29]: df1
Out[29]:
a b c d e
0 1.331587 0.715279 -1.545400 -0.008384 0.621336
1 -0.720086 0.265512 0.108549 0.004291 -0.174600
2 0.433026 1.203037 -0.965066 1.028274 0.228630
3 0.445138 -1.136602 0.135137 1.484537 -1.079805
4 -1.977728 -1.743372 0.266070 2.384967 1.123691
5 1.672622 0.099149 1.397996 -0.271248 0.613204
6 -0.267317 -0.549309 0.132708 -0.476142 1.308473
7 0.195013 0.400210 -0.337632 1.256472 -0.731970
8 0.660232 -0.350872 -0.939433 -0.489337 -0.804591
9 -0.212698 -0.339140 0.312170 0.565153 -0.147420
data = df1.to_string(index=False)
# In your case you don't need sep because you are reading the ordinarily csv file
chunks = pd.read_csv(StringIO(data), sep='\s+', chunksize=3)
In [40]: for chunk in chunks:
....: print(chunk)
....:
a b c d e
0 1.331587 0.715279 -1.545400 -0.008384 0.621336
1 -0.720086 0.265512 0.108549 0.004291 -0.174600
2 0.433026 1.203037 -0.965066 1.028274 0.228630
a b c d e
0 0.445138 -1.136602 0.135137 1.484537 -1.079805
1 -1.977728 -1.743372 0.266070 2.384967 1.123691
2 1.672622 0.099149 1.397996 -0.271248 0.613204
a b c d e
0 -0.267317 -0.549309 0.132708 -0.476142 1.308473
1 0.195013 0.400210 -0.337632 1.256472 -0.731970
2 0.660232 -0.350872 -0.939433 -0.489337 -0.804591
a b c d e
0 -0.212698 -0.33914 0.31217 0.565153 -0.14742