如何将带有dtype的列作为对象转换为Pandas Dataframe中的字符串

use*_*523 69 python pandas

当我将csv文件读取到pandas数据帧时,每个列都会转换为自己的数据类型.我有一个转换为对象的列.我想为此列执行字符串操作,例如拆分值和创建列表.但是没有这样的操作是可能的,因为它的dtype是对象.任何人都可以让我知道将列的所有项目转换为字符串而不是对象的方法吗?

我尝试了几种方法但没有任何效果.我使用了astype,str(),to_string等.

a=lambda x: str(x).split(',')
df['column'].apply(a)
Run Code Online (Sandbox Code Playgroud)

要么

df['column'].astype(str)
Run Code Online (Sandbox Code Playgroud)

Sir*_* S. 26

由于字符串数据类型具有可变长度,因此默认情况下将其存储为对象dtype.如果要将它们存储为字符串类型,则可以执行以下操作.

df['column'] = df['column'].astype('|S80') #where the max length is set at 80 bytes,
Run Code Online (Sandbox Code Playgroud)

或者

df['column'] = df['column'].astype('|S') # which will by default set the length to the max len it encounters
Run Code Online (Sandbox Code Playgroud)

  • 您使用的是哪个python版本?它对我不起作用 (13认同)
  • 收到了“ TypeError:数据类型为“ bytes256”无法理解”的提示,为什么? (2认同)

Hyp*_*nja 16

您是否尝试将其分配回列?

df['column'] = df['column'].astype('str') 
Run Code Online (Sandbox Code Playgroud)

参考这个问题,pandas数据帧存储指向字符串的指针,因此它是'object'类型.根据文档,您可以尝试:

df['column_new'] = df['column'].str.split(',') 
Run Code Online (Sandbox Code Playgroud)

  • 是的,我试过了.即使在尝试之后,该列的数据类型仍然是对象. (36认同)
  • 他们两个都不工作:( (9认同)
  • http://stackoverflow.com/questions/21018654/strings-in-a-dataframe-but-dtype-is-object (3认同)

zur*_*fyx 10

没有直接回答问题,但它可能会帮助别人.

我有一个名为的列Volume,包含-(无效/ NaN)和格式化的数字,

df['Volume'] = df['Volume'].astype('str')
df['Volume'] = df['Volume'].str.replace(',', '')
df['Volume'] = pd.to_numeric(df['Volume'], errors='coerce')
Run Code Online (Sandbox Code Playgroud)

要将其应用于str.replace,需要强制转换为字符串

pandas.Series.str.replace
pandas.to_numeric


kos*_*ter 5

您可以尝试使用df['column'].str.然后使用任何字符串函数。Pandas 文档包括诸如split 之类的文档

  • 我相信 pandas 总是将字符串列存储为对象 (3认同)
  • 不,pandas 将存储指向字符串的指针,最终的列类型将是“object” (2认同)