我的数据框有很多(192)列。如何一次选择两列?

时间:2018-08-27 11:37:37

标签: python pandas dataframe indexing

我的数据框就像df.columns= ['Time1','Pmpp1','Time2',..........,'Pmpp96'],我想一次选择两个连续的列。例如,一次Time1Pmpp1。 我的代码是:

for i,j in zip(df.columns,df.columns[1:]):
    print(i,j)

我目前的输出是:

 Time1 Pmmp1
 Pmmp1 Time2
 Time2 Pmpp2

预期输出为:

 Time1 Pmmp1
 Time2 Pmpp2
 Time3 Pmpp3 

4 个答案:

答案 0 :(得分:5)

您正在压缩列表,并且从第二个元素开始是相同的列表,这不是您想要的。您想压缩列表中不均匀甚至均匀的索引。例如,您可以将代码替换为:

for i, j in zip(df.columns[::2], df.columns[1::2]): print(i, j)

答案 1 :(得分:1)

作为整数位置切片的替代方法,可以使用str.startswith创建2个索引对象。然后使用zip成对地遍历它们:

df = pd.DataFrame(columns=['Time1', 'Pmpp1', 'Time2', 'Pmpp2', 'Time3', 'Pmpp3'])

times = df.columns[df.columns.str.startswith('Time')]
pmpps = df.columns[df.columns.str.startswith('Pmpp')]

for i, j in zip(times, pmpps):
    print(i, j)

Time1 Pmpp1
Time2 Pmpp2
Time3 Pmpp3

答案 2 :(得分:0)

在这种情况下,重塑DataFrame可能很有意义。因此,您不必再一次选择两列,而是拥有一个带有最终代表您的测量值的两列的DataFrame。

首先,创建一个DataFrames列表,其中每个DataFrames只有一个“ Time and Pmpp”列:

dfs = []
for i in range(1,97):
    tmp = df[['Time{0}'.format(i),'Pmpp{0}'.format(i)]]
    tmp.columns = ['Time', 'Pmpp']  # Standardize column names
    tmp['n'] = i                    # Remember measurement number
    dfs.append(tmp)                 # Keep with our cleaned dataframes 

然后您可以将它们一起连接到新的DataFrame中。那有三列。

new_df = pd.concat(dfs, ignore_index=True, sort=False)

对于您的数据,这应该是更易于管理的形状。

>>> new_df.columns
[n, Time, Pmpp]

现在,您可以遍历此DataFrame中的行,并获得预期输出的

for i, row in new_df.iterrows():
    print(i, row.n, row.Time, row.Psmpp)

这也将使使用其余熊猫来分析数据更加容易。

new_df.Pmpp.mean()
new_df.describe()

答案 3 :(得分:0)

经过一系列的试验,我明白了。我的代码如下:

for a in range(0,len(df.columns),2):
    print(df.columns[a],df.columns[a+1]) 

我的输出是:

DateTime   A016.Pmp_ref
DateTime.1 A024.Pmp_ref
DateTime.2 A040.Pmp_ref
DateTime.3 A048.Pmp_ref
DateTime.4 A056.Pmp_ref
DateTime.5 A064.Pmp_ref
DateTime.6 A072.Pmp_ref
DateTime.7 A080.Pmp_ref
DateTime.8 A096.Pmp_ref
DateTime.9 A120.Pmp_ref
DateTime.10 A124.Pmp_ref
DateTime.11 A128.Pmp_ref