我正在使用以下代码使用pandas read_csv读取CSV文件
headers = ["1","2","3","4","5"]
fields = ["1", "5"]
for chunk in pandas.read_csv(fileName, names=headers, header=0, usecols=fields, chunksize=chunkSize):
有时我的CSV不会包含“ 5”列,而我希望能够处理这种情况并指定一些默认值.有没有办法只读取我的CSV文件的标头而不读取整个文件,以便我可以手动处理呢?还是其他巧妙的方法来默认缺少列的值?
解决方法:
如果您传递nrows = 0,那么它只会读取列的行,然后可以调用intersection查找常见的列值并避免任何错误:
In[14]:
t="""1,2,3,5,6
0,1,2,3,4"""
headers = ["1","2","3","4","5"]
fields = ["1", "5"]
cols = pd.read_csv(io.StringIO(t), nrows=0).columns
cols
Out[14]: Index(['1', '2', '3', '5', '6'], dtype='object')
因此,现在我们有了列名,我们可以调用intersection以针对您的预期和实际列查找有效列:
In[15]:
valid_cols = cols.intersection(headers)
valid_cols
Out[15]: Index(['1', '2', '3', '5'], dtype='object')
您可以对字段执行相同的操作,然后可以将其传递给当前代码以避免任何异常
只是为了说明传递的nrows = 0只是读取标题行:
In[16]:
pd.read_csv(io.StringIO(t), nrows=0)
Out[16]:
Empty DataFrame
Columns: [1, 2, 3, 5, 6]
Index: []
标签:pandas,csv,python 来源: https://codeday.me/bug/20191111/2017434.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。