Python - 将Dataframe中的所有项目转换为字符串

the*_*ler 16 python string dataframe pandas

我遵循以下过程:在Python中,如何将列表中的所有项目转换为浮点数?因为我的Dataframe的每一列都是list,但floats我没有选择将所有值更改为strings.

df = [str(i) for i in df]

但这失败了.

它只删除了除第一行列名之外的所有数据.

然后,尝试df = [str(i) for i in df.values]导致将整个Dataframe更改为一个大的列表,但这会使数据过于混乱,无法满足我的脚本目标,即将Dataframe导出到我的Oracle表.

有没有办法将我的Dataframe中非字符串的所有项目转换为字符串?

Pde*_*evG 32

你可以用这个:

df = df.astype(str)
Run Code Online (Sandbox Code Playgroud)

出于好奇,我决定看看接受的解决方案和我的解决方案之间的效率是否存在差异.

结果如下:

示例df:df = pd.DataFrame([list(range(1000))],index = [0])

测试df.astype:

df = pd.DataFrame([list(range(1000))], index=[0])
Run Code Online (Sandbox Code Playgroud)

测试df.applymap:

%timeit df.astype(str) 
>> 100 loops, best of 3: 2.18 ms per loop
Run Code Online (Sandbox Code Playgroud)

看起来好df.astype快了:)

  • list_of_dfs = [df.astype(str) for list_of_dfs 中的 df] (3认同)

Psi*_*dom 22

你可以使用applymap方法:

df = df.applymap(str)
Run Code Online (Sandbox Code Playgroud)

  • 我不知道您的数据框有多大,但是astype似乎要快得多。见我的回答:)。 (2认同)
  • 小心地将其与 nan 值一起使用,它会将它们变成“nan”字符串。 (2认同)

San*_*ord 5

pandas >= 1.0 现在有一个专用的字符串数据类型:

您可以使用.astype('string')将您的列转换为此Pandas字符串数据类型

df = df.astype('string')
Run Code Online (Sandbox Code Playgroud)

这与 using strwhich 设置熊猫“对象”数据类型不同:

df = df.astype(str)
Run Code Online (Sandbox Code Playgroud)

当您查看数据框的信息时,您可以看到数据类型的差异:

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)
Run Code Online (Sandbox Code Playgroud)


从文档:

'string' 扩展类型解决了对象数据类型 NumPy 数组的几个问题:

1) 您可能会意外地在对象 dtype 数组中存储字符串和非字符串的混合物。StringArray 只能存储字符串。

2) object dtype 破坏了特定于 dtype 的操作,如 DataFrame.select_dtypes()。没有明确的方法来选择文本同时排除非文本,但仍然是对象类型的列。

3)在阅读代码时,对象dtype数组的内容不如字符串清晰。


可以在此处找到有关 pandas 1.0 的信息:https :
//pandas.pydata.org/pandas-docs/version/1.0.0/whatsnew/v1.0.0.html