Zhu*_*arb 48 python series pandas
我在Python 2.7中使用Pandas'ver 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'])
Run Code Online (Sandbox Code Playgroud)
该id
系列包含一些整数和字符串.它dtype
默认是object
.我想将所有内容转换id
为字符串.我试过astype(str)
,它产生下面的输出.
df['id'].astype(str)
0 1
1 5
2 z
3 1
4 1
5 7
6 2
7 6
Run Code Online (Sandbox Code Playgroud)
1)如何将所有元素转换id
为String?
2)我最终将id
用于索引数据帧.与具有整数索引相比,数据帧中的String索引会减慢速度吗?
Ami*_*mit 75
您可以将id的所有元素转换为str
使用apply
df.id.apply(str)
0 123
1 512
2 zhub1
3 12354.3
4 129
5 753
6 295
7 610
Run Code Online (Sandbox Code Playgroud)
由OP编辑:
我认为这个问题与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
Run Code Online (Sandbox Code Playgroud)
roc*_*ves 65
反映最新实践的新答案:截至目前(v1.2.4),既不工作astype('str')
也不astype(str)
工作。
根据文档,可以通过以下方式将系列转换为字符串数据类型:
df['id'] = df['id'].astype("string")
df['id'] = pandas.Series(df['id'], dtype="string")
df['id'] = pandas.Series(df['id'], dtype=pandas.StringDtype)
Run Code Online (Sandbox Code Playgroud)
小智 7
您可以使用:
df.loc[:,'id'] = df.loc[:, 'id'].astype(str)
Run Code Online (Sandbox Code Playgroud)
这就是他们推荐这个解决方案的原因: Pandas doc
TD;LR
为了反映一些答案:
df['id'] = df['id'].astype("string")
Run Code Online (Sandbox Code Playgroud)
这将在给定的示例中中断,因为它将尝试转换为StringArray,而 StringArray 无法处理“字符串”中的任何数字。
df['id']= df['id'].astype(str)
Run Code Online (Sandbox Code Playgroud)
对我来说,这个解决方案会发出一些警告:
> 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
Run Code Online (Sandbox Code Playgroud)
就我个人而言,以上都不适合我。做了什么:
new_str = [str(x) for x in old_obj][0]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
211946 次 |
最近记录: |