如何将使用类 shell 语法创建的空格分隔值 (csv) 文件读取到 DataFrame 中

问题描述 投票:0回答:1

我正在寻找一种将 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 
python dataframe csv io shlex
1个回答
0
投票

您可以设置分隔符:

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
© www.soinside.com 2019 - 2024. All rights reserved.