gpt4 book ai didi

python - 在 iterrows 循环中修改 pandas 数据框

转载 作者:行者123 更新时间:2023-12-04 10:03:40 25 4
gpt4 key购买 nike

我是 Python 的新手。

我正在尝试使用 for 循环向数据框中的元素添加前缀(序列号),以便在分析前进行数据清理/准备。

代码是

a=pd.read_excel('C:/Users/HP/Desktop/WFH/PowerBI/CMM data.xlsx','CMM_unclean')
a['Serial Number'] = a['Serial Number'].apply(str)
print(a.iloc[72,1])

for index,row in a.iterrows():
if len(row['Serial Number']) == 6:
row['Serial Number'] = 'SR0' + row['Serial Number']
print(row['Serial Number'])

print(a.iloc[72,1])

输出是
C:\Users\HP\anaconda3\envs\test\python.exe C:/Users/HP/PycharmProjects/test/first.py
101306
SR0101306
101306

我不明白为什么在 for 循环内部会发生这种情况,值在变化,但在外部是相同的。

最佳答案

这永远不会改变名为 a 的实际数据帧.

TL;DR:您从 iterrows 返回的行是不再连接到原始数据框的副本,因此编辑不会更改您的数据框。但是,您可以使用索引来访问和编辑数据框的相关行。

解释

为什么?

您从 iterrows 返回的行是 副本 更长 连接到原始数据框 ,因此编辑不会更改您的数据框。但是,您可以使用 index访问和编辑数据框的相关行。

解决办法是这样的:

import pandas as pd

a = pd.read_excel("Book1.xlsx")
a['Serial Number'] = a['Serial Number'].apply(str)

a.head()
# ID Serial Number
# 0 1 SR0101306
# 1 2 1101306

print(a.iloc[0,1])
#101306

for index,row in a.iterrows():
row = row.copy()
if len(row['Serial Number']) == 6:
# use the index and .loc method to alter the dataframe
a.loc[index, 'Serial Number'] = 'SR0' + row['Serial Number']

print(a.iloc[0,1])
#SR0101306

关于python - 在 iterrows 循环中修改 pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61696233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com