我有一个要处理的熊猫数据框,以便“数量”列从字符串(“ 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
答案 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