如何在熊猫数据框中捕获连字符分隔数字的平均值?
Posted
技术标签:
【中文标题】如何在熊猫数据框中捕获连字符分隔数字的平均值?【英文标题】:How to capture mean of hyphen seperated numbers in a pandas dataframe? 【发布时间】:2018-02-19 18:56:22 【问题描述】:我有一个Pandas DataFrame
的吸毒者年龄。我的问题:有些年龄用连字符分隔,例如'50-64'
。我想获取连字符分隔数字的平均值并用它替换单元格。
1.有没有办法通过某种循环或方法来做到这一点?我不想简单地硬编码drugs.loc[10,'age'] = np.mean(55+64)
2.为了将来参考,有没有更优雅的方式来处理用连字符分隔的数字的数据?
input:
drugs.age
output:
0 12
1 13
2 14
3 15
4 16
5 17
6 18
7 19
8 20
9 21
10 22-23
11 24-25
12 26-29
13 30-34
14 35-49
15 50-64
16 65+
input:
drugs.age.dtype
output:
dtype('O')
【问题讨论】:
【参考方案1】:你可以使用:
replace
+
清空 string
split
值到 DataFrame
由astype
转换为float
所有值
通过DataFrame.mean
获取每行的平均值
drugs['age'] = drugs['age'].str.replace('+','')
.str.split('-', expand=True)
.astype(float)
.mean(axis=1)
print (drugs)
age
0 12.0
1 13.0
2 14.0
3 15.0
4 16.0
5 17.0
6 18.0
7 19.0
8 20.0
9 21.0
10 22.5
11 24.5
12 27.5
13 32.0
14 42.0
15 57.0
16 65.0
如果某些值是数字并且某些字符串是必需的,则首先将全部转换为字符串:
drugs['age'] = drugs['age'].astype(str)
.str.replace('+','')
.str.split('-', expand=True)
.astype(float)
.mean(axis=1)
【讨论】:
谢谢!这很好用。了解了 expand=True 和 .astype(float) 很高兴能帮上忙!美好的一天! 这是一个非常简洁的答案。谢谢@jezrael。一个问题,您能否解释一下当展开设置为“False”时 str.split 如何为系列工作。我在看pandas.pydata.org/pandas-docs/stable/generated/…,但我不太明白。非常感谢 这给出了TypeError: arg must be a list, tuple, 1-d array, or Series
。我尝试删除 expand=True
但又出现了另一个错误。
@stallingOne - 哎呀,需要drugs['age'] = drugs['age'].astype(str) .str.replace('+','') .str.split('-', expand=True).apply(lambda x: pd.to_numeric(x, errros='coerce')).mean(axis=1)
以上是关于如何在熊猫数据框中捕获连字符分隔数字的平均值?的主要内容,如果未能解决你的问题,请参考以下文章