我正在寻找一种将 csv 文件读入数据帧的快速方法。 csv 文件是用空格分隔的,但是,如果它包含多个由空格分隔的单词,则列名称将放在双引号之间。 pd.read_csv 与 sep=" " 不起作用,因为列命名空格。
我目前通过在文件的每一行应用
shlex.split
并将其更改为逗号分隔来解决此问题。然而,它花费的时间太长:对于 15K 行的文件来说大约需要 6 秒。下面是我的文件 ('template.csv'
) 的示例以及如何通过 shlex.split
解决该问题的代码片段。
提前感谢您的帮助!
a b c "d e" "f g" "h k"
1 2 3 4 5 6
2 2 3 4 5 6
3 2 3 4 5 6
4 2 3 4 5 6
5 2 3 4 5 6
6 2 3 4 5 6
下面是代码和所需的数据帧输出:
import pandas as pd
import shlex
data = []
df = pd.DataFrame()
for line in open(r'template.csv'):
line = shlex.split(line)
data.append(line)
df = pd.DataFrame(data[1:], columns=[colName for colName in data[0]])
a b c d e f g h k
0 1 2 3 4 5 6
1 2 2 3 4 5 6
2 3 2 3 4 5 6
3 4 2 3 4 5 6
4 5 2 3 4 5 6
5 6 2 3 4 5 6
您可以设置分隔符:
df = pd.read_csv('template.csv', sep=' ')
print(df)
# Output
a b c d e f g h k
0 1 2 3 4 5 6
1 2 2 3 4 5 6
2 3 2 3 4 5 6
3 4 2 3 4 5 6
4 5 2 3 4 5 6
5 6 2 3 4 5 6