首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用pandas将string对象转换为int/float

使用pandas将string对象转换为int/float
EN

Stack Overflow用户
提问于 2014-06-04 20:31:34
回答 1查看 64K关注 0票数 24
代码语言:javascript
复制
import pandas as pd

path1 = "/home/supertramp/Desktop/100&life_180_data.csv"

mydf =  pd.read_csv(path1)

numcigar = {"Never":0 ,"1-5 Cigarettes/day" :1,"10-20 Cigarettes/day":4}

print mydf['Cigarettes']

mydf['CigarNum'] = mydf['Cigarettes'].apply(numcigar.get).astype(float)

print mydf['CigarNum']

mydf.to_csv('/home/supertramp/Desktop/powerRangers.csv')

csv文件"100&life_180_data.csv“包含诸如年龄、体重指数、香烟、酒精等列。

代码语言:javascript
复制
No                int64
Age               int64
BMI             float64
Alcohol          object
Cigarettes       object
dtype: object

香烟列包含“从不”、"1-5支/天“、"10-20支/天”。我想为这些对象分配权重(从不,1-5支/天,....)

预期的输出是附加的新列CigarNum,它只包含数字0,1,2 CigarNum如预期的那样直到8行,然后在CigarNum列中显示Nan到最后一行

代码语言:javascript
复制
0                     Never
1                     Never
2        1-5 Cigarettes/day
3                     Never
4                     Never
5                     Never
6                     Never
7                     Never
8                     Never
9                     Never
10                    Never
11                    Never
12     10-20 Cigarettes/day
13       1-5 Cigarettes/day
14                    Never
...
167                    Never
168                    Never
169     10-20 Cigarettes/day
170                    Never
171                    Never
172                    Never
173                    Never
174                    Never
175                    Never
176                    Never
177                    Never
178                    Never
179                    Never
180                    Never
181                    Never
Name: Cigarettes, Length: 182, dtype: object

我得到的输出不应该在前几行之后给出NaN。

代码语言:javascript
复制
0      0
1      0
2      1
3      0
4      0
5      0
6      0
7      0
8      0
9      0
10   NaN
11   NaN
12   NaN
13   NaN
14     0
...
167   NaN
168   NaN
169   NaN
170   NaN
171   NaN
172   NaN
173   NaN
174   NaN
175   NaN
176   NaN
177   NaN
178   NaN
179   NaN
180   NaN
181   NaN
Name: CigarNum, Length: 182, dtype: float64
EN

回答 1

Stack Overflow用户

发布于 2015-05-15 04:17:06

尝试使用此函数来解决所有此类问题:

代码语言:javascript
复制
def get_series_ids(x):
    '''Function returns a pandas series consisting of ids, 
       corresponding to objects in input pandas series x
       Example: 
       get_series_ids(pd.Series(['a','a','b','b','c'])) 
       returns Series([0,0,1,1,2], dtype=int)'''

    values = np.unique(x)
    values2nums = dict(zip(values,range(len(values))))
    return x.replace(values2nums)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24037507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档