Pandas:将Series的数据类型更改为String

时间:2014-03-06 17:24:23

标签: python pandas series

我在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'])

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索引会减慢吗?

8 个答案:

答案 0 :(得分:65)

您可以使用str

将所有ID元素转换为apply
df.id.apply(str)

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

按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

答案 1 :(得分:31)

你必须分配它,如下所示: -

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

答案 2 :(得分:31)

一个反映最新实践的新答案:从1.0.1版开始,astype('str')astype(str)都不起作用。

As per the documentation,可以通过以下方式将Series转换为字符串数据类型:

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

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

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

答案 3 :(得分:1)

您可以使用:

if (isset($_GET['delete']))
{
    $id = $_GET['delete'];

    $d = $mysqli_query($db,"DELETE FROM `tbllist` WHERE ENo = $id") or die($mysqli->error());

    if($d){
    header("location:index.php");
    }
}

这就是为什么他们推荐此解决方案的原因:Pandas doc

TD; LR

反映一些答案:

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

这将破坏给定的示例,因为它将尝试转换为无法处理“字符串”中任何数字的StringArray

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

对我来说,此解决方案会引发一些警告:

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

答案 4 :(得分:1)

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

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

答案 5 :(得分:1)

对我来说,它起作用了

df_dict['row_33']

在此处查看文档:

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.convert_dtypes.html

答案 6 :(得分:0)

以上个人都不适合我。 做了什么:

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

答案 7 :(得分:0)

我对python感到非常沮丧!这些解决方案都不适合我! 我在Google Colaborative使用python 3。我也尝试了另一种解决方案

  

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

但是它也不起作用