作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我可以通过迭代行来替换 pandas 数据帧的特定列中的值,并将这些值与元组列表中包含的相应元组对进行匹配。
但是,当我在大型数据帧上运行此代码时,它会变得相对较慢,因为它必须迭代整个元组列表才能找到数据帧中行的匹配项。(12280it [23:21,8.66it/s])
是否有更Pythonic的方式来进行匹配和替换?例如索引元组列表,以及一些按索引过滤的代码?
我使用的代码可以在下面找到。
import pandas as pd
from tqdm import tqdm
# initialize list of lists
data = [['some', 1], ['random', 10], ['stuff', 14],['which',8],['is',22],['irrelevant',24]]
# Create the pandas DataFrame
df = pd.DataFrame(data, columns = ['Strings', 'Number'])
df
Strings Number
0 some 1
1 random 10
2 stuff 14
3 which 8
4 is 22
5 irrelevant 24
#Create lists necessary to make tuples
x = list(range(1, 25))
y = list(range(345, 395, 2))
#Create tuple
z = list(zip(x,y))
#Replace number values in dataframe
#With corresponding values from tuple
for index, row in tqdm(df.iterrows()):
for x in z:
if row["Number"] ==x[0]:
df.set_value(index,"Number", int(x[1]))
结果
df
Strings Number
0 some 345
1 random 363
2 stuff 371
3 which 359
4 is 387
5 irrelevant 391
最佳答案
使用 map
z = dict(zip(x,y))
df['Number'] = df['Number'].map(z)
<小时/>
Strings Number
0 some 345
1 random 363
2 stuff 371
3 which 359
4 is 387
5 irrelevant 391
<小时/>
要仅映射某些值并避免NaN
,请使用replace
df['Number'] = df['Number'].replace(z)
关于python - 如何迭代数据帧行,以更Pythonic的方式替换匹配元组中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59724593/
我是一名优秀的程序员,十分优秀!