熊猫: 将 Series 的数据类型改为 String

我在 Python 2.7中使用 Panda‘ over 0.12.0’,并且有一个如下的数据框:

df = pd.DataFrame({'id' : [123,512,'zhub1', 12354.3, 129, 753, 295, 610],
'colour': ['black', 'white','white','white',
'black', 'black', 'white', 'white'],
'shape': ['round', 'triangular', 'triangular','triangular','square',
'triangular','round','triangular']
},  columns= ['id','colour', 'shape'])

id系列由一些整数和字符串组成。默认情况下,它的 dtypeobject。我想将 id的所有内容转换为字符串。我试了 astype(str),它会产生下面的输出。

df['id'].astype(str)
0    1
1    5
2    z
3    1
4    1
5    7
6    2
7    6

1) 如何将 id的所有元素转换为 String?

2) 我最终将使用 id对数据帧进行索引。与使用整数索引相比,在数据框架中使用 String 索引是否会降低速度?

553007 次浏览

您可以使用 apply将 id 的所有元素转换为 str

df.id.apply(str)


0        123
1        512
2      zhub1
3    12354.3
4        129
5        753
6        295
7        610

编辑:

我认为这个问题与 Python 版本(2.7.)有关,这个版本起作用了:

df['id'].astype(basestring)
0        123
1        512
2      zhub1
3    12354.3
4        129
5        753
6        295
7        610
Name: id, dtype: object

你必须分配它,像这样:-

df['id']= df['id'].astype(str)

就我个人而言,以上这些都不适合我。 事件:

new_str = [str(x) for x in old_obj][0]

一个反映最新实践的新答案: 到目前为止(1.2.4版) ,astype('str')astype(str)都不工作。

根据文档 ,Series 可以通过以下方式转换为 string 数据类型:

df['id'] = df['id'].astype("string")


df['id'] = pandas.Series(df['id'], dtype="string")


df['id'] = pandas.Series(df['id'], dtype=pandas.StringDtype)

你可使用:

df.loc[:,'id'] = df.loc[:, 'id'].astype(str)

这就是为什么他们推荐这种解决方案: 熊猫医生

运输署

反映一些答案:

df['id'] = df['id'].astype("string")

这将在给定的例子中中断,因为它将尝试转换为 StringArray,它不能处理“字符串”中的任何数字。

df['id']= df['id'].astype(str)

对我来说,这个解决方案提出了一些警告:

> SettingWithCopyWarning:
> A value is trying to be set on a copy of a
> slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead

您的问题可以通过首先将其转换为对象来轻松解决。转换为 object 之后,只需使用“ astype”将其转换为 str。

obj = lambda x:x[1:]
df['id']=df['id'].apply(obj).astype('str')

对我来说,它奏效了:

 df['id'].convert_dtypes()

请参阅以下文件:

Https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas

有两种可能性:

  • 使用 .astype("str").astype("string")
  • 使用 .astype(pd.StringDtype())。从 正式文件

对我来说. to _ string ()起作用了

df['id']=df['id'].to_string()

使用熊猫字符串方法即 df['id'].str.cat()

如果你想动态地

df_obj = df.select_dtypes(include='object')
df[df_obj.columns] = df_obj.astype(str)