所以我搜寻了互联网,试图弄清楚该怎么做,但没有成功。我有大约5,000行的数据集,但为简单起见,在下面做了这个数据框。我想计算年龄(以月为单位的数字除以12),但是我不知道如何让python识别数字。您能给我指出什么想法或方向吗?
test = (3, 6, 1, '7 m', '8 m', 5, 11, '10 m','almost 4 m', '9 y & m', '3 Yr 7 mths')
test_list = list(test)
test_series = pd.Series(test_list)
df_test = pd.DataFrame(test_series)
df_test.rename(columns = {0:'Key'}, inplace = True)
df_test['Years_Old'] = np.nan df_test
答案 0 :(得分:0)
使用正则表达式,我们可以首先提取子字符串,例如“ [数字] [空格(可选)] [y或m(可选)]”(不区分大小写),然后将[数字]乘以1/12 [y或m]为“ m”(因为我们正在计算年数),然后将其总计为每条记录:
import re
z = df_test['Key'].astype(str).str.extractall('(\d+)\s*([mMyYwW])?').fillna('m').astype({0: int, 1: str})
df_test['Years_Old'] = (z[0] * z[1].str.lower().map({'y': 1, 'm': 1/12, 'w': 1/52})).groupby(level=0).sum()
print(df_test)
输出:
Key Years_Old
0 3 0.250000
1 6 0.500000
2 1 0.083333
3 7 m 0.583333
4 8 m 0.666667
5 5 0.416667
6 11 0.916667
7 10 m 0.833333
8 almost 4 m 0.333333
9 9 y & m 9.000000
10 3 Yr 7 mths 3.583333
11 10 w 0.192308
注意:
.fillna('y')
而不是.fillna('m')
行上的z = ...
切换到年份