【发布时间】:2019-03-24 02:03:17
【问题描述】:
问题:
我有一个只存储 unicode 值的 Pandas.DataFrame。每列包含可以转换为整数或浮点数或保留为 unicode 的值。 (Python 2.7.15 版,Pandas 0.23.0 版)
df = pd.DataFrame({'x':[u'1', u'1.23', u'', u'foo_text'], 'y':[u'bar_text', u'', u'2', u'4.56']})
print df
x y
0 1 bar_text
1 1.23
2 2
3 foo_text 4.56
我想将每个单元格的类型转换如下:
- 如果可以转换为 int,请转换为 int
- 如果可能的话,转换成浮点数,转换成浮点数
- 否则,保留为 unicode
解决方案尝试:
以下代码正是我想要的:
type_list = [int, float, unicode]
for column in df.columns:
for index in df.index:
for desired_type in type_list:
try:
df.loc[index,column] = desired_type(df.loc[index,column])
break
except ValueError:
pass
问题是我的实际 DataFrame 是 >1000 万个单元格,这将太长而无法执行。我正在努力寻找一种更快的方法来做到这一点。
我查看了pandas.DataFrame.infer_objects() 和pandas.to_numeric(),但似乎都没有处理列中混合类型的情况。
【问题讨论】:
-
最好为每个
x、y创建 3 个新列,以便您最终得到x_int、x_float、x_str并相应地构造后续代码。 -
在一天结束时,列数及其名称必须保持不变。您是否建议将此作为中间步骤?
-
Python 2.7.15 版,Pandas 0.23.0 版(更新问题)
-
不,我建议在 1 列中有多个类型表示逻辑错误,最好将类型分成自己的列
-
@haleemur-ali 我同意,但不幸的是,我需要将数据混合在原始列中