我想按以下方式合并单元格。
之前:
| | test1 | test2 | test3 |
| -:|:----- |:----- | -----:|
| 0 | value | value | value |
| 1 | test4 | test5 |
| 2 | value | value |
| 3 | test6 | test7 | test8 |
| 4 | value | value | value |
| 5 | test9 | test0 |
| 6 | value | value |
之后:
| | test1 | test2 | test3 | test4 | test5 | test6 | test7 | test8 | test9 | test0 |
| -:|:----- |:----- | ----- |:----- |:----- |:----- |:----- |:----- |:----- | -----:|
| 0 | value | value | value | value | value | value | value | value | value | value |
我想在熊猫的帮助下使用Python代码更改单元格。请帮我解决一下这个。谢谢。
答案 0 :(得分:2)
这是您可以做的。
import pandas as pd
df = pd.DataFrame({'test1 ':['15','test4','79', 'test6', '34', 'test9', '323'],
'test2 ':['78','test5','45', 'test7', '4', 'test10', '34'],
'test3 ':['8','','', 'test8', '56', '', '']})
print("Original Dataframe")
print(df)
df1 = pd.DataFrame()
col_names = []
col_names = df.iloc[1::2, :].to_numpy('str').tolist()
row_values = df.iloc[2::2, :].to_numpy('str').tolist()
col_names = [j for sub in col_names for j in sub if j!= '']
row_values = [j for sub in row_values for j in sub if j!= '']
df1 = pd.DataFrame([row_values], columns= col_names)
print("Dataframe 1")
print(df1)
df2 = df.iloc[[0, ]]
print("Dataframe 2")
print(df2)
df3 = pd.concat([df2, df1], axis=1)
print("Dataframe Result")
print(df3)
df1
包含除第一个数据外的所有数据。 df2
仅包含原始列和第一行。最后,将df1 and df2
连接起来形成df3
。
这样会为您提供输出:
Original Dataframe
test1 test2 test3
0 15 78 8
1 test4 test5
2 79 45
3 test6 test7 test8
4 34 4 56
5 test9 test10
6 323 34
Dataframe 1
test4 test5 test6 test7 test8 test9 test10
0 79 45 34 4 56 323 34
Dataframe 2
test1 test2 test3
0 15 78 8
Dataframe Result
test1 test2 test3 test4 test5 test6 test7 test8 test9 test10
0 15 78 8 79 45 34 4 56 323 34
答案 1 :(得分:2)
从第1行开始切片,并用melt
对其进行预处理,以制成s
系列。将s
的偶数行切成列,将奇数行切成值,并从这些列和值构造一个新的数据帧。最后,加入原始df的第0行
Sample df:
test1 test2 test3
0 value1 value2 value3
1 test4 test5 NaN
2 value4 value5 NaN
3 test6 test7 test8
4 value6 value7 value8
5 test9 test0 NaN
6 value9 value0 NaN
s = df.iloc[1:].melt().dropna()['value']
cols = s[0::2].tolist()
vals = s[1::2].tolist()
df_final = df.iloc[[0]].join(pd.DataFrame([vals], columns=cols)).sort_index(1)
Out[140]:
test0 test1 test2 test3 test4 test5 test6 test7 test8 \
0 value0 value1 value2 value3 value4 value5 value6 value7 value8
test9
0 value9