如何在熊猫数据框中捕获连字符分隔数字的平均值?

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 值到 DataFrameastype 转换为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)

以上是关于如何在熊猫数据框中捕获连字符分隔数字的平均值?的主要内容,如果未能解决你的问题,请参考以下文章

如何从熊猫数据框中的字符串项中删除数字

如何在特定小时的滚动平均值的熊猫数据框中添加一列

如何从熊猫数据框中的列中删除字符串值

如何将熊猫数据框中的嵌套逗号分隔列转换为Python中的特定格式

格式化熊猫数据框中整数的千位分隔符

如何在熊猫数据框中划分时间