python - 使用 Pandas read_csv() 处理开头以“sep=”开头的 .csv 文件
问题描述
当您使用记事本打开时,我有一个带有制表符分隔文件的 .csv 文件,如下所示(您在记事本中看到的空间实际上是制表符 (\t):
sep =
Time Val1 Val2
00:01 10 20
"sep=" 是否存在以便 excel 可以正确读取 .csv 文件。问题是,当您尝试使用 read_csv 打开它时,它会返回一个名为“s”的列的单列数据框。如果我用 Excel 打开文件并双击第一列宽度以具有自动宽度,保存并关闭,则文件正确格式化为逗号分隔。当您使用记事本打开文件时,文件开头不再有“sep=”,然后 Pandas 会正确读取所有列和值。
在有人问之前: 1. 我尝试使用以下方法删除第一行:
with open(csvFileName, mode="rU") as infile:
with open(csvFileName, mode="r") as infile:
要么删除第一行,要么将 "\t" 替换为 "," 并将其写回另一个文件,但都不起作用。2.我也尝试检测和使用不同的编码方案,所以编码不是问题。3.该文件使用lineterminator = \n
,我使用该参数读取 4.我使用skiprows=0
跳过第一行,没有工作 5.我试图将header = 1
其指向它具有标题的行,并设置sep=\t
,它读取的数量列和行正确,但列名是“UnnamedXYZ”并且值都是NaNs
任何想法表示赞赏!
解决方案
如果要使用第一行中的分隔符值来解析 csv:
来自 data.csv 的输入:
sep = ,
Year Dec Jan
1 50 60
2 25 50
3 30 30
4 40 20
5 10 10
将文件读入列表,并保存到数据框中:
x = []
sep = ''
with open(filename) as f:
for i, line in enumerate(f):
if i == 0:
sep = line.rstrip()[-1]
if i > 0:
x.append(line.rstrip().split(','))
x = pd.DataFrame(data=x[1:], columns=x[0])
X
Year Dec Jan
0 1 50 60
1 2 25 50
2 3 30 30
3 4 40 20
4 5 10 10
如果没有分隔符,或者分隔符字段为空,或者分隔符在 csv 的后续行中不存在,您应该添加进一步的逻辑来处理。
推荐阅读
- python - locust.io 模拟消息队列的固定调用率
- python - anaconda 安装新环境遇到错误
- react-native - Expo Notification askAsync() - 有没有办法自定义消息?
- python - 将一维向量正确整形为多个矩阵(numpy)
- python-3.x - 为什么函数 key=randint(1,71) 不起作用?
- python - 每当我将 {{example}} 放在 div 中时,它都会将文本留空。(烧瓶)
- java - 如何使用 retroift2 实现自定义错误处理
- amazon-web-services - 在 IAM 策略中使用 LeadingKeys 条件时,DynamoDb 上的 KeyConditionExpression 用于“查询所有项目”?
- while-loop - 我的 while 循环(Python)有什么问题?
- html - 如何无法让用户为其中一个注册表单字段选择标签?