python - 如何迭代多列数据框中的每个单独的列值?

标签 python pandas dataframe

我有多个列数据框,列有 ['国家'、'能源供应'、'人均能源供应'、'% 可再生能源']

在供能栏,我想把栏的单位从Giga换算成Peta。但在这个过程中 energy['Energy Supply']*= energy['Energy Supply'],当值类似于“...”(缺失值用此表示)时,也会乘以或说重复。此外,列中的字符串值也成倍增加。 (例如原始:Peta,操作后:PetaPetaPetaPeta...)。

为了阻止这种情况发生,我正在运行这个:

energy = pd.read_excel("Energy Indicators.xls",skiprows = 16, skip_footer = 38)
energy.drop(['Unnamed: 0','Unnamed: 1'],axis = 1, inplace = True)
energy.columns = ['Country', 'Energy Supply', 'Energy Supply per Capita', '% Renewable']
for i in energy['Energy Supply']:
    if (isinstance(energy[i],int) == True):
        energy['Energy Supply'][i]=energy['Energy Supply'][i]*1000000
return (energy)

但我没有得到结果,即仅更改整数类型变量的值,并且没有任何变化。

我认为问题出在哪里,前两行将给出false条件,因为第一行是“字符串”,基于此,程序不会修改值,而我想要单独检查该值是否为整数类型,如果是,则将数字乘以 1,000,000。

输入:

    Country        Energy Supply    Energy Supply per Capita    % Renewable
0   NaN             Petajoules            Gigajoules                 %
1   Afghanistan        321                   10                  78.6693
2   Albania            102                   35                    100
3   Algeria            1959                  51                  0.55101
4   American Samoa      ...                 ...                  0.641026

预期输出:

    Country        Energy Supply    Energy Supply per Capita    % Renewable
0   NaN             Petajoules            Gigajoules                 %
1   Afghanistan        3210000                10                     78.6693
2   Albania            1020000                35                      100
3   Algeria            19590000               51                     0.55101
4   American Samoa      ...                 ...                    0.641026

当前输出:

    Country        Energy Supply    Energy Supply per Capita    % Renewable
0   NaN             PetajoulesPeta.         Gigajoules               %
1   Afghanistan        3210000                10                   78.6693
2   Albania            1020000                35                    100
3   Algeria            19590000               51                   0.55101
4   American Samoa      ........                ...                0.641026

最佳答案

您可以使用 str.isnumeric检查字符串是否为数字然后相乘。

energy['Energy Supply'] = energy['Energy Supply'].apply(lambda x: int(x) * 1000000 if str(x).isnumeric() else x)

print (energy)

    Country         Energy Supply   Energy Supply per Capita    % Renewable
0             NaN    Petajoules           Gigajoules                     %
1     Afghanistan    321000000                10                   78.6693
2         Albania    102000000                35                       100
3         Algeria    1959000000               51                   0.55101 
4  American Samoa        ...                  ..                  0.641026

关于python - 如何迭代多列数据框中的每个单独的列值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52913191/

相关文章:

python - Pandas:将索引更改为列

python - 使用pandas获取按天的数据累计和

python - 根据另一个数据框的内容向 pandas 数据框添加一列

python - 选择 Python 文件访问路径

python - 如何根据两个条件过滤 csv 文件中的特定行? (使用 Pandas )

python - 根据键值过滤python中的嵌套字典

python - 如何在 nltk 中使用 stanford NLP 的 "Universal dependencies, enhanced"解析器?

python - 使用就地掩码的工作方式不同吗?

python - Pandas DataFrame 过滤列 A 取决于列 B 是否包含 A 中一组值的 x

python - 从另一列的子字符串创建列