我想pandas read_csv正确地将以下示例文本读入DataFrame:
"INDEX"|"COLUMN_STRING"|"COLUMN_INTEGER"|"COLUMN_EMPTY"|"COLUMN_EMPTY_STRING"
1|"string"|21||""
我需要解析的文件包含应该用""
包裹的字符串的所有值。
应为NaN
的值没有双引号,例如:||
我希望read_csv将所有“引用”值保持为字符串,也是""
,但是
它强制NaN
作为""
的默认值。
如果我使用keep_default_na=False
,则会将空字符串''
设置为||
和|""|
。
此外,使用dtype={"COLUMN_EMPTY_STRING": str}
也无济于事
有人知道这个泡菜的解决方案吗?
另一种可能的解决方案是使用quoting=3
。这将使字符串保持为"string"
,这可以在解析后解决。我不能使用它,因为我提供index_col
参数,这会引发错误,因为它无法找到,例如INDEX
,因为它从文件中读取"INDEX"
。
答案 0 :(得分:0)
根据文件的大小,一种解决方案可以是在内存中预处理文件,使用python ||
io.StringIO
的所有出现次数>
import io
from pandas.io.parsers import read_csv
with open( 'test.csv', 'r' ) as fin:
with io.StringIO( fin.read( ).replace( '||', '|NaN|' )) as ios:
df = read_csv( ios, na_values='NaN', sep='|',
index_col=["INDEX"], keep_default_na=False )
这就是df
的样子:
COLUMN_STRING COLUMN_INTEGER COLUMN_EMPTY COLUMN_EMPTY_STRING
INDEX
1 string 21 NaN
验证:
print ( 'empty: >{}<, empty string: >{}<'.format( df.COLUMN_EMPTY[ 1 ],
df.COLUMN_EMPTY_STRING[ 1 ] ))
empty: >nan<, empty string: ><