Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我的数据帧有许多(192)列。如何一次选择两列?_Python_Pandas_Dataframe_Indexing - Fatal编程技术网

Python 我的数据帧有许多(192)列。如何一次选择两列?

Python 我的数据帧有许多(192)列。如何一次选择两列?,python,pandas,dataframe,indexing,Python,Pandas,Dataframe,Indexing,我的数据帧类似于df.columns=['Time1','Pmpp1','Time2',…,'Pmpp96']我想一次选择两个连续的列。例如,Time1,Pmpp1。 我的代码是: 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 DateTime

我的数据帧类似于
df.columns=['Time1','Pmpp1','Time2',…,'Pmpp96']
我想一次选择两个连续的列。例如,
Time1
Pmpp1
。 我的代码是:

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 
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
预期产出为:

 Time1 Pmmp1
 Pmmp1 Time2
 Time2 Pmpp2
 Time1 Pmmp1
 Time2 Pmpp2
 Time3 Pmpp3 
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

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

zip中i,j的
(df.columns[::2],df.columns[1::2]):

打印(i,j)

在这种情况下,重塑数据帧可能是有意义的。所以,不是一次选择两列,而是有一个数据框,其中有两列最终表示您的度量

首先,创建一个数据帧列表,其中每个数据帧只有一个时间和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 
然后您可以将它们连接到一个新的数据帧中。它有三列

new_df = pd.concat(dfs, ignore_index=True, sort=False)
这应该是一个更易于管理的数据形状

>>> new_df.columns
[n, Time, Pmpp]
new_df.Pmpp.mean()
new_df.describe()
现在,您可以迭代此数据帧中的行,并获得预期输出的

for i, row in new_df.iterrows():
    print(i, row.n, row.Time, row.Psmpp)
它还将使使用熊猫的其余部分来分析数据变得更容易

>>> new_df.columns
[n, Time, Pmpp]
new_df.Pmpp.mean()
new_df.describe()

作为整数位置切片的替代方法,可以使用创建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

经过一系列的试验,我得到了它。我的代码如下:

for a in range(0,len(df.columns),2):
    print(df.columns[a],df.columns[a+1]) 
我的输出是:

 Time1 Pmmp1
 Pmmp1 Time2
 Time2 Pmpp2
 Time1 Pmmp1
 Time2 Pmpp2
 Time3 Pmpp3 
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

你事先知道这些栏目的名称吗?是的,我知道。上面的例子是这样的。我已经修改了我的问题,请重新检查。你可以考虑删除<代码> Python 3.x/<代码>标签,最后,添加<代码>熊猫>代码>。使用适当的标签,它可以帮助您获得更多的答案和其他有类似问题的用户。感谢回复。但是,它给出的错误是
无效语法
。请您再次检查。
文件“”,第18行的^SyntaxError:invalid syntax
发布一个复制此错误的完整代码示例我昨天尝试过。它不起作用。今天,它成功了。杰出的非常感谢你。我正处于python的起步阶段,您能解释一下如何理解这一点吗?主要是
.columns[::2]
。columns[1::2]
?我是说,他们到底在干什么?看。它很好地概括了这个主题