Python 熊猫能否读取带引号的空间分隔数据?
我有一个格式化的文本文件,我不知道如何在pandas中读取csv以正确读取它。正则表达式直接工作,但不在pandas.read_csv中 默认情况下,我认为这应该适用于默认的quoting=0,而不使用正则表达式Python 熊猫能否读取带引号的空间分隔数据?,python,pandas,Python,Pandas,我有一个格式化的文本文件,我不知道如何在pandas中读取csv以正确读取它。正则表达式直接工作,但不在pandas.read_csv中 默认情况下,我认为这应该适用于默认的quoting=0,而不使用正则表达式 import pandas as pd from io import StringIO s = " \"Random Text\" 1234.00 5678.00 9876.00 1 Z5 2 0 1 1.500 35.3 1.00 389
import pandas as pd
from io import StringIO
s = " \"Random Text\" 1234.00 5678.00 9876.00 1 Z5 2 0 1 1.500 35.3 1.00 389 0.096000 10.00 15000.0 0.102 0.199 0.040 1 0 0 2900 N/A N/A N/A\n"
print(s)
df = pd.read_csv(StringIO(s), engine='python', header=None, delim_whitespace=True, quoting=0)
display(df)
但这会在单独的列中生成“随机的”
和文本”
使用正则表达式尝试2:
sep_regex = '\s+(?=([^\"]*\"[^\"]*\")*[^\"]*$)' # regex to find spaces except within quotes
df = pd.read_csv(StringIO(s), header=None, sep=sep_regex, engine='python', warn_bad_lines=True)
display(df)
这将正确地将引用的文本保持在一起,但在每列之间放置NaN。
这应该可以:
df = pd.read_csv(StringIO(s), header=None, sep=r'\s+', quotechar='"')
print(df)
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
0 Random Text 1234.0 5678.0 9876.0 1 Z5 2 0 1 1.5 35.3 1.0 389 0.096 10.0 15000.0 0.102 0.199 0.04 1 0 0 2900 NaN NaN NaN
这对我很有用:
df = pd.read_csv(StringIO(s), sep=None, engine='python',
header=None, quoting=0, skipinitialspace=True)
输出:
0 1 2 3 4 5 6 7 8 9 ... 16 17 18 19 20 21 22 23 24 25
0 Random Text 1234.0 5678.0 9876.0 1 Z5 2 0 1 1.5 ... 0.102 0.199 0.04 1 0 0 2900 NaN NaN NaN
[1 rows x 26 columns]
删除
engine='python'
似乎会产生所需的结果。请不要发布代码、数据或回溯的图像。复制并粘贴为文本,然后将其格式化为代码(选择它并键入ctrl-k
)。。。