Python Pandas将字符串转换为int / float

时间:2018-09-10 14:55:26

标签: python pandas

我有一个要处理的熊猫数据框,以便“数量”列从字符串(“ hh.hh'hours'”)转换为int或float。

我想知道在这种情况下的最佳做法是什么。我尝试了pd.to_numeric(),但是没有成功。我认为我的问题在于每个字符串结尾处的“小时数”。

是否还有另一个函数可以识别数字字符,而只是忽略字符串的“小时”部分,还是在使用内置dtype转换函数(pd.to_numeric)之前首先需要修剪掉最后5个字符?谢谢!

           day  amount
2018-08-23  3   24.00 hours
2018-08-24  4   8.00 hours
2018-08-25  5   32.00 hours
2018-08-26  6   24.00 hours
2018-08-27  0   24.00 hours

2 个答案:

答案 0 :(得分:2)

只需使用字符串方法即可获取重要的数字。根据列的混乱程度或格式,有很多可用的选项:

import pandas as pd

df['amount'] = pd.to_numeric(df.amount.str.replace('hours', ''), downcast='integer')
# or 
df['amount'] = pd.to_numeric(df.amount.str[:-5], downcast='integer')
# or
df['amount'] = pd.to_numeric(df.amount.str.extract('(\d+\.?\d*)')[0], downcast='integer')

所有输出:

            day  amount
2018-08-23    3      24
2018-08-24    4       8
2018-08-25    5      32
2018-08-26    6      24
2018-08-27    0      24

答案 1 :(得分:2)

根据数据的完整性,可以使用pd.to_timedelta将其转换为duration(timeDelta):

>>>df.amount=pd.to_timedelta(df.amount)
>>>df

    date      day   amount
0   2018-08-23  3   1 days 00:00:00
1   2018-08-24  4   0 days 08:00:00
2   2018-08-25  5   1 days 08:00:00
3   2018-08-26  6   1 days 00:00:00
4   2018-08-27  0   1 days 00:00:00