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