在pandas中将列名由浮点数转换为整数

4

I have a pandas data frame which looks like this

    Data Source   World Development Indicators  Unnamed: 2                         Unnamed: 3        Unnamed: 4        Unnamed: 5
    Country Name         Country Code         Indicator Name                     Indicator Code     1.960000e+03      1.961000e+03  
    Aruba                    ABW         GDP at market prices (constant 2010 US$)   NY.GDP.MKTP.KD           NaN             NaN    

为将第一行转换为其列,我使用以下代码:

data.columns = data.iloc[0]

结果数据框被修改为:

Country Name    Country Code    Indicator Name  Indicator Code     1960.0         1961.0        1962.0
Country Name    Country Code    Indicator Name  Indicator Code  1.960000e+03    1.961000e+03
Aruba   ABW GDP at market prices (constant 2010 US$)    NY.GDP.MKTP.KD  NaN           NaN

现在我的主要问题是对于以年份为标题的列,我得到的是1960.0,而我想得到一个整数即1960。如果有帮助,将不胜感激。

2个回答

1
Option 1。
def rn(x):
    try:
        return '{:0.0f}'.format(x)
    except:
        return x

df.T.set_index(0).rename_axis(rn).T

enter image description here


1
另一个可能的解决方案是在使用read_csvcsv创建DataFrame时,添加参数skiprowsheader。请注意,保留HTML标签。
import pandas as pd
import numpy as np
from pandas.compat import StringIO

temp=u"""Data Source;World Development Indicators;Unnamed: 2;Unnamed: 3;Unnamed: 4;Unnamed: 5
Country Name;Country Code;Indicator Name;Indicator Code;1960;1961
Aruba;ABW;GDP at market prices (constant 2010 US$);NY.GDP.MKTP.KD;NaN;NaN"""
#after testing replace 'StringIO(temp)' to 'filename.csv'
df = pd.read_csv(StringIO(temp), sep=";", skiprows=1)
print (df)
  Country Name Country Code                            Indicator Name  \
0        Aruba          ABW  GDP at market prices (constant 2010 US$)   

   Indicator Code  1960  1961  
0  NY.GDP.MKTP.KD   NaN   NaN 

df = pd.read_csv(StringIO(temp), sep=";", header=1)
print (df)
  Country Name Country Code                            Indicator Name  \
0        Aruba          ABW  GDP at market prices (constant 2010 US$)   

   Indicator Code  1960  1961  
0  NY.GDP.MKTP.KD   NaN   NaN  

如果不可能的话,请查看完美的MaxU解决方案,并添加df = df[1:]以从数据中删除第一行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接