我希望pandas.io.parsers.read_csv根据我的csv文件中的字符串始终为"quoted"
来区分字符串和其他数据类型。可能吗?
我有以下csv示例:
"ID"|"DATE"|"NAME"|"YEAR"|"FLOAT"|"BOOL"
"01"|2000-01-01|"Name1"|1975|1.2|1
"02"||""||||
它应该给我一个数据框,其中所有被引用的人都是字符串。很可能大熊猫会把其他所有东西都做成np.float64,但之后我可以处理它。我想等待使用dtype
,因为我有很多列,我不想为所有列映射类型。如果可能的话,我想尝试仅以"quote"
为基础。
我尝试使用quotechar='"'
和quoting=3
,但quotechar
根本没有做任何事情,而quoting
保留""
我不会也想要。在我看来,pandas解析器应该能够做到,因为这是区分csv文件中字符串的方法。
答案 0 :(得分:0)
指定dtypes会更直接,但如果您不想这样做,我建议您使用quoting=3
并在之后进行清理。
strip_char = lambda x: x.strip('"')
In [40]: df = pd.read_csv(StringIO(s), sep='|', quoting=3)
In [41]: df
Out[41]:
"ID" "DATE" "NAME" "YEAR" "FLOAT" "BOOL"
0 "01" 2000-01-01 "Name1" 1975 1.2 1
1 "02" NaN "" NaN NaN NaN
[2 rows x 6 columns]
In [42]: df = df.rename(columns=strip_char)
In [43]: df[['ID', 'NAME']] = df[['ID', 'NAME']].applymap(strip_char)
In [44]: df
Out[44]:
ID DATE NAME YEAR FLOAT BOOL
0 01 2000-01-01 Name1 1975 1.2 1
1 02 NaN NaN NaN NaN
[2 rows x 6 columns]
In [45]: df.dtypes
Out[45]:
ID object
DATE object
NAME object
YEAR float64
FLOAT float64
BOOL float64
dtype: object
编辑:然后你可以设置索引:
In [11]: df = df.set_index('ID')
In [12]: df
Out[12]:
DATE NAME YEAR FLOAT BOOL
ID
01 2000-01-01 Name1 1975 1.2 1
02 NaN NaN NaN NaN
[2 rows x 5 columns]