我按照以下步骤操作:In Python, how do I convert all of the items in a list to floats?因为我的Dataframe的每一列都是list
,但我选择将所有值更改为floats
而不是strings
。< / p>
df = [str(i) for i in df]
但这失败了。
它只删除了除第一行列名之外的所有数据。
然后,尝试df = [str(i) for i in df.values]
导致将整个Dataframe更改为一个大列表,但这会使数据过于混乱,无法满足我的脚本目标,即将Dataframe导出到我的Oracle表中。
有没有办法将我的Dataframe中非字符串的所有项目转换为字符串?
答案 0 :(得分:23)
您可以使用:
df = df.astype(str)
出于好奇,我决定看看已接受的解决方案与我的解决方案之间的效率是否存在差异。
结果如下:
示例df: df = pd.DataFrame([list(range(1000))],index = [0])
测试df.astype
:
%timeit df.astype(str)
>> 100 loops, best of 3: 2.18 ms per loop
测试df.applymap
:
%timeit df.applymap(str)
1 loops, best of 3: 245 ms per loop
似乎df.astype
的速度要快得多:)
答案 1 :(得分:15)
您可以使用applymap
方法:
df = df.applymap(str)
答案 2 :(得分:3)
对于熊猫> = 1.0,现在有一个专用的字符串数据类型:
您可以使用.astype('string')将列转换为此熊猫 string数据类型:
df = df.astype('string')
这与使用str
设置熊猫的“对象”数据类型不同:
df = df.astype(str)
当您查看数据框的信息时,可以看到数据类型的差异:
df = pd.DataFrame({
'zipcode_str': [90210, 90211] ,
'zipcode_string': [90210, 90211],
})
df['zipcode_str'] = df['zipcode_str'].astype(str)
df['zipcode_string'] = df['zipcode_str'].astype('string')
df.info()
# you can see that the first column has dtype object
# while the second column has the new dtype string
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 zipcode_str 2 non-null object
1 zipcode_string 2 non-null string
dtypes: object(1), string(1)
从文档中:
'string'扩展类型解决了object-dtype的几个问题 NumPy数组:
1)您可能会意外地将字符串和非字符串的混合存储在 对象dtype数组。一个StringArray只能存储字符串。
2)对象dtype中断dtype特定的操作,例如 DataFrame.select_dtypes()。没有一种清晰的方法可以只选择文字 同时排除非文本列,但仍然是object-dtype列。
3)读取代码时,对象dtype数组的内容不太清楚 比字符串。
有关熊猫1.0的信息,请参见:
https://pandas.pydata.org/pandas-docs/version/1.0.0/whatsnew/v1.0.0.html
答案 3 :(得分:0)
这对我有用:
dt.applymap(lambda x: x[0] if type(x) is list else None)