Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.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 在几列之后将行分成两行_Python_Pandas - Fatal编程技术网

Python 在几列之后将行分成两行

Python 在几列之后将行分成两行,python,pandas,Python,Pandas,我有一个CSV文件,如果它包含超过4列,我会尝试将我的行拆分为多行 例如:- 预期产出: 所以在熊猫或蟒蛇身上有办法做到这一点 抱歉,如果这是一个简单的问题当CSV文件中有两列具有相同名称时,pandas dataframe会自动在重复的列名后附加一个整数值 例如: 此CSV文件: 将变成这样: df = pd.read_csv("Book1.csv") df 现在,为了解决你的问题,让我们考虑上面的数据文件作为输入数据文件。 试试这个: cols = df.col

我有一个CSV文件,如果它包含超过4列,我会尝试将我的行拆分为多行

例如:-

预期产出:

所以在熊猫或蟒蛇身上有办法做到这一点


抱歉,如果这是一个简单的问题

当CSV文件中有两列具有相同名称时,pandas dataframe会自动在重复的列名后附加一个整数值

例如:

此CSV文件:

将变成这样:

df = pd.read_csv("Book1.csv")
df

现在,为了解决你的问题,让我们考虑上面的数据文件作为输入数据文件。 试试这个

cols = df.columns.tolist()
cols.remove('id')
start = 0
end = 4
new_df = []
final_cols = ['id','x1','y1','x2','y2']
while start<len(cols):
    if end>len(cols):
        end = len(cols)
    temp = cols[start:end]
    start = end
    end = end+4
    temp_df = df.loc[:,['id']+temp]
    temp_df.columns = final_cols[:1+len(temp)]

    if len(temp)<4:
        temp_df[final_cols[1+len(temp):]] = None
    
    print(temp_df)
        
    new_df.append(temp_df)

pd.concat(new_df).reset_index(drop = True)
cols=df.columns.tolist()
cols.remove('id'))
开始=0
结束=4
新的_df=[]
最终值=['id'、'x1'、'y1'、'x2'、'y2']
而斯塔顿(科尔斯):
结束=长度(cols)
温度=cols[开始:结束]
开始=结束
结束=结束+4
temp_df=df.loc[:,['id']+temp]
临时柱=最终柱[:1+长度(临时)]

如果len(temp)您可以首先将
video
列设置为索引,然后将剩余的每4列合并到新的数据帧中。最后,重置索引以返回
video

df.set_索引('video',inplace=True)
dfs=[]
对于范围内的i(len(df.columns)//4):
d=df.iloc[:,范围(i*4,i*4+4)]
dfs.append(d.set_轴(['x_中心','y_中心']*2,轴=1))
df_u=pd.concat(dfs).reset_index()
我认为下面的列表理解应该有效,但它在我的机器上给出了一个位置索引错误,我不知道为什么

df_ = pd.concat([df.iloc[: range(i*4, i*4+4)].set_axis(['x_center', 'y_center']*2, axis=1) for i in range(len(df.columns)//4)])
您可以尝试:
s=df.stack();pd.DataFrame({'x_center':s[:,'x_center'],'y_center':s[:,'y_center']})
其中
df
是您的数据帧。
print(df_)

  video   x_center   y_center   x_center   y_center
0   1_1  31.510973  22.610222  31.383655  22.488293
1   1_1  31.856295  22.830109  32.016905  22.948702
2   1_1  32.011684  22.990689  31.933356  23.004779