python - Pandas csv 阅读器创建 NaN 索引
问题描述
我有一个 CSV 文件,其内容如下:
A: 12, B: 14
A: 1, B: 4
A: 2, B: 1
A: 21, B: 41
我可以用正则表达式分隔列:
import pandas as pd
df = pd.read_csv("test.csv", sep = ":\s*|,\s*", names = ["dummy1", "A", "dummy2", "B"], engine = "python")
print(df)
输出
dummy1 A dummy2 B
0 A 12 B 14
1 A 1 B 4
2 A 2 B 1
3 A 21 B 41
为了防止创建无用的列,我尝试了以下策略:
import pandas as pd
df1 = pd.read_csv("test.csv", sep = "A:\s*|,\s*B:\s*", names = ["A", "B"], engine = "python")
print(df1)
但现在索引只包含NaN
值:
A B
NaN 12 14
NaN 1 4
NaN 2 1
NaN 21 41
为什么会发生这种情况以及如何预防?
解决方案
pandas.read_csv
函数接受一个index_col
参数,该参数指示 DataFrame 的行标签(索引)。您需要使用int
索引或索引序列设置此参数,因为默认情况下它是无。
index_col
: int or sequence or False, 默认无用作 DataFrame 的行标签的列。如果给定一个序列,则使用 MultiIndex。如果您在每行末尾有一个带有分隔符的格式错误的文件,您可能会考虑
index_col=False
强制 pandas不使用第一列作为索引(行名)
如果这仍然不起作用,您可以放弃使用delimiter
,只需对两列使用转换器功能即可将数字与字母字符分开:
func = lambda x: x.split(':')[-1]
df1 = pd.read_csv("test.csv",
names = ["A", "B"],
engine = "python",
converters={'A': func,
'B': func})
输出:
A B
0 12 14
1 1 4
2 2 1
3 21 41
推荐阅读
- reactjs - 需要在 React + Validation 的 antd 形式中进行条件检查
- html - 自定义 stylelinks.jsp 对 IBM Connections on prem 没有任何影响
- amazon-web-services - AWS Glue - 是否使用爬虫
- c# - 将 Google 身份验证方法添加到现有 ASP.NET WebAPI 项目
- apache - Mod重写uri中第一个斜杠内的通配符问题
- javascript - 过滤没有键的 JavaScript 数组
- angularjs - Angular 和 Laravel 的第一步 - 重新编译失败
- wordpress - 从 wordpress 站点中的静态资源中删除查询字符串
- excel - 将单个工作表复制到多个工作簿
- imagemagick - LoadError:libgvc.so.5:无法打开共享对象文件:没有这样的文件或目录 - RMagick2.so