python - 删除 python pandas 列中的特定字符串
问题描述
我有一个列性别的数据框。它包括对性别的预测。现在,性别列具有诸如 most_male、most_female 之类的值。我主要想删除。所以我尝试了df['gender'] = df['gender'].map(lambda x: x.lstrip('mostly_'))
但我得到了一个对应于 'ale' 的列,其值为 'male'
解决方案
pandas.DataFrame.replace
您可以将字典传递给此方法以指定要使用的列
df.replace({'gender': {'mostly_': ''}}, regex=True)
pandas.Series.str.replace
优点是不需要指定regex=True
df.gender.str.replace('mostly_', '')
pandas.Series.str
投票“最可能”打破。但是,如果您知道所有条目都以开头,"mostly_"
那么为什么不呢?
df.gender.str[7:]
pandas.Series.map
我不喜欢其他选项,因为它们都涉及字符串操作。您可以更明确地使用字典映射并保持恒定时间查找
df.gender.map({'mostly_male': 'male', 'mostly_female': 'female'})
定时
设置
df = pd.DataFrame(dict(gender=[f"mostly_{g}" for g in ['male', 'female'] * 10000]))
测试
%timeit df.replace({'gender': {'mostly_': ''}}, regex=True)
%timeit df.gender.str.replace('mostly_', '')
%timeit df.gender.str[7:]
%timeit df.gender.map({'mostly_male': 'male', 'mostly_female': 'female'})
100 loops, best of 3: 12.8 ms per loop
100 loops, best of 3: 16.1 ms per loop
100 loops, best of 3: 5.42 ms per loop
1000 loops, best of 3: 1.8 ms per loop
推荐阅读
- laravel - Laravel - Get Collection of all data coming from Polymorphic relations
- java - 实现HashMap:避免compress函数引起的冲突
- python - socket.accept() in python; How to set client side for the connection port
- python - Detecting operation changes in GitPython
- javascript - React Component props won't update
- node.js - nodejs es6 way of running task every second for 10 seconds
- python-3.x - 在 Pandas 中将系列加载到 DataFrame 中
- javascript - 在字符串中循环并添加一些字符,而无需内置函数和 es6
- python - 如何使用 xlrd 和 xlwt 将计算值从一个 excel 附加到另一个 excel
- javascript - Javascript:根据键的值有条件地过滤 JSON?