熊猫:无法使用while循环更改单元格的值

时间:2018-08-23 03:39:12

标签: pandas

我正在尝试使用while循环来读取文件的所有行,并在满足条件时编辑特定单元格的值。

当我从Excel读取数据时,我的逻辑工作正常。但是,当我从csv文件读取内容时,相同的逻辑无法正常工作。

这是我从Excel文件读取的逻辑:

df = pd.read_excel('Energy Indicators.xls', 'Energy', index_col=None, na_values=['NA'], skiprows = 15, skipfooter = 38, header = 1, parse_cols ='C:F')

df = df.rename(columns = {'Unnamed: 0' : 'Country', 'Renewable Electricity Production': '% Renewable'})
df = df.drop(0, axis=0)

i = 0 
while (i !=len(df)):
    if df.iloc[i]['Country'] == "Ukraine18":
        print(df.iloc[i]['Country'])
        df.iloc[i]['Country'] = 'Ukraine'
        print(df.iloc[i]['Country'])
    i += 1
df

我得到的结果是:

Ukraine18
Ukraine

但是当我读取CSV文件时:

df = pd.read_csv('world_bank.csv', skiprows = 4)
df = df.rename(columns = {'Country Name' : 'Country'})
i = 0 
while (i !=len(df)):
    if df.iloc[i]['Country'] == "Aruba":
        print(df.iloc[i]['Country'])
        df.iloc[i]['Country'] = "Arb"
        print(df.iloc[i]['Country'])
    i += 1
df

我得到的结果是:

Aruba
Aruba

有人可以帮忙吗? CSV文件有什么问题?

2 个答案:

答案 0 :(得分:2)

@Anna Iliukovich-Strakovskaia,@ msr_003,你们是对的!我将代码更改为df['ColumnName][i],它可以与CSV文件一起使用。但是,现在不能使用Excel文件。

因此,似乎从CSV文件读取数据时,df['ColumnName][i]正常工作, 但是使用从Excel文件读取的数据,df.iloc[i]['ColumnName']可以正常工作。

在某个时间点上,我不知道为什么会有区别,因为我不是在文件“内部”使用数据,而是在处理从这些文件读入“数据帧”的数据。我认为,一旦数据进入数据帧,源就不应有任何影响。

无论如何,谢谢您的帮助!!

答案 1 :(得分:0)

我通常按如下方式进行修改。

testdf = pd.read_csv("sam.csv")

testdf

   ExportIndex AgentName         Country
0            1    Prince  United Kingdom
1            2       Nit  United Kingdom
2            3     Akhil  United Kingdom
3            4     Ruiva  United Kingdom
4            5     Niraj  United Kingdom
5            6     Nitin   United States

i = 0
while(i != len(testdf)):
    if(testdf['AgentName'][i] == 'Nit'):
        testdf['AgentName'][i] = 'Nitesh'
    i += 1

testdf

   ExportIndex AgentName         Country
0            1    Prince  United Kingdom
1            2    Nitesh  United Kingdom
2            3     Akhil  United Kingdom
3            4     Ruiva  United Kingdom
4            5     Niraj  United Kingdom
5            6     Nitin   United States

但是我不确定您的方法有什么问题。