Pandas / Python - CSV文件 - 选择一行和两列或更多列

时间:2018-04-09 09:52:15

标签: python pandas

所以我现在已经很好地掌握了Pandas,我试图分析一个CSV文件,但是希望做一些不同的事情,我看的不是一行一列,而是一行和两列,目的是根据CSV文件扩展列数。

我的代码是:

import pandas as pd

df = pd.read_csv("UNdata_Export_20180402_123348163.csv")
df = df.set_index(["Country or Area"])
df3 = df[df.columns[0:3]]
df3=df.loc["Australia"]
print(df3)

所以输出是:

                 Year  Count  Rate   Source Source Type
Country or Area                                        
Australia        2010    229   1.0  CTS/NSO          CJ
Australia        2009    263   1.2  CTS/NSO          CJ
Australia        2008    261   1.2  CTS/NSO          CJ
Australia        2007    255   1.2  CTS/NSO          CJ
Australia        2006    281   1.4  CTS/NSO          CJ
Australia        2005    259   1.3  CTS/NSO          CJ
Australia        2004    264   1.3  CTS/NSO          CJ
Australia        2003    302   1.5  CTS/NSO          CJ
Australia        2002    318   1.6  CTS/NSO          CJ
Australia        2001    310   1.6  CTS/NSO          CJ
Australia        2000    302   1.6  CTS/NSO          CJ
Australia        1999    343   1.8  CTS/NSO          CJ
Australia        1998    285   1.5  CTS/NSO          CJ
Australia        1997    321   1.7  CTS/NSO          CJ
Australia        1996    312   1.7  CTS/NSO          CJ
Australia        1995    326   1.8  CTS/NSO          CJ

我努力只选择年份和费率列,因为上面的代码打印出特定国家/地区的所有内容,澳大利亚。另外,我不太确定如何设置" df3 = df [df.columns [0:3]]"。似乎如果我改变数字3,它什么都不做。

问题:如何选择多个特定列,比如说两个?从那以后,我如何选择3列或更多列?我需要改变什么价值?

我查看了Python API,但我找不到类似的问题。编辑:这个问题与链接的问题不同,因为我选择了特定的行以及特定的列。根据我的理解,其他问题的行很好,并且他们不会尝试选择特定的行。

2 个答案:

答案 0 :(得分:1)

选择前n列:

df.iloc[:, :n]

根据名称选择一组特定的列:

selection = ['Count',  'Rate']
df[selection]

答案 1 :(得分:1)

如果想要按名称和位置一起选择,这里有两种可能的解决方案:

print (df.columns[:2])
Index(['Year', 'Count'], dtype='object')

#select by names only, for columns get names by select columns by slicing
df3 = df.loc["Australia", df.columns[:2]]

与按索引和列中的名称选择相同:

df3 = df.loc["Australia", ['Count', 'Rate']]

对于按职位选择,只能使用ilocget_loc

#select by positions only, for index get position
df3 = df.iloc[df.index.get_loc("Australia"), 0:2]