我是 Python 的新手,但目前正在对一些表格进行网络抓取,我正在尝试将我获得的 2 个数据帧合并到 1 个 csv 文件中。
所以假设我有 df_1 看起来像:
排名 | 团队 | 积分 |
---|---|---|
64 | AR 点亮摇滚 | 35 |
102 | 亚伯·克里斯蒂安 | 75 |
34 | 空军 | 45 |
df_2 看起来像:
排名 | 团队 | 积分 |
---|---|---|
354 | AR 点亮摇滚 | 46 |
284 | 亚伯·克里斯蒂安 | 68 |
82 | 空军 | 42 |
(我已经按团队对两个数据框进行了排序) 我想将这两个合并到 1 个 csv 文件中,最终看起来像:
排名 | 团队 | 积分 | 排名 | 团队 | 积分 |
---|---|---|---|---|---|
64 | AR 点亮摇滚 | 35 | 354 | AR 点亮摇滚 | 46 |
102 | 亚伯·克里斯蒂安 | 75 | 284 | 亚伯·克里斯蒂安 | 68 |
34 | 空军 | 45 | 82 | 空军 | 42 |
或者如果可能的话用中间的空白列分隔 2 个表:
a | b | c | d | e | f | 克 | h | |
---|---|---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
我正在考虑稍后在 csv 中的 2 个表之间进行一些计算,只是希望它更具可读性。由于我是 Python 的新手,因此将两个表都放在 1 个 csv 文件中可能不是一个好主意。如果也是这种情况,请告诉我。
目前我在各自的对象中都有两个数据框,到目前为止只尝试过连接。
df = pd.concat([df_1, df_2], axis=1)
这已经完成了我想要的,除了我还根据特定列按字母顺序排序的两个数据帧,然后当它们连接时,第一个数据帧被排序,第二个数据帧根据第一个数据帧中的另一个值进行排序.所以最终结果看起来像这样:
排名 | 团队 | 积分 | 排名 | 团队 | 积分 |
---|---|---|---|---|---|
64 | AR 点亮摇滚 | 35 | 64 | 俄勒冈州 | 57 |
102 | 亚伯·克里斯蒂安 | 75 | 102 | 囊州 | 81 |
34 | 空军 | 45 | 34 | 方舟松BL | 59 |
第二个数据框由 Rank 添加,而不是独立行动。
(抱歉,制作样表时遇到问题)
在将两个数据帧放入 csv 后,我添加了一些当前 csv 的片段。两个数据框最初都按团队名称的字母顺序排序,但是当添加第二个数据框时,它会按第一个数据框的排名排序。
更新 (从 Soroosh 编辑代码以更好地显示问题)
import pandas as pd
data1 = {
'Rank': [64, 102, 34,],
'Team': ["AR Lit Rock", "Abl Christian", "Air Force",],
'Points': [35, 75, 45,],
}
data2 = {
'Rank': [354, 284, 82,],
'Team': ["Air Force", "Abl Christian", "AR Lit Rock",],
'Points': [46, 68, 42,],
}
df_1 = pd.DataFrame(data1)
df_2 = pd.DataFrame(data2)
df_1 = df_1.sort_values('Team')
df_2 = df_2.sort_values('Team')
data_blk = {
"Blank": [""]*len(df_1["Rank"]),
}
df_blk = pd.DataFrame(data_blk)
new_df = pd.concat([df_1, df_blk], axis=1)
new_df = pd.concat([new_df, df_2], axis=1)
print(new_df.head())
我拿了 2 个未排序的表,按团队列排序,然后两个数据帧在连接数据帧时保持按该团队列排序。
在提供样品后,我尝试了这个并且对我有用:
import pandas as pd
data1 = {
'A': [1, 1,],
'B': [2, 2,],
'C': [3, 3,],
'D': [4, 4,],
}
data2 = {
'E': [5, 5,],
'F': [6, 6,],
'G': [7, 7,],
'H': [8, 8,],
}
df_1 = pd.DataFrame(data1)
df_blk = pd.DataFrame({"Blank":["", "",]})
df_2 = pd.DataFrame(data2)
new_df = pd.concat([df_1, df_blk], axis=1)
new_df = pd.concat([new_df, df_2], axis=1)
print(new_df.head())
和输出:
A B C D Blank E F G H
0 1 2 3 4 5 6 7 8
1 1 2 3 4 5 6 7 8
所以,在你的情况下:
import pandas as pd
data1 = {
'Rank': [64, 102, 34,],
'Team': ["AR Lit Rock", "Abl Christian", "Air Force",],
'Points': [35, 75, 45,],
}
data2 = {
'Rank': [354, 284, 82,],
'Team': ["AR Lit Rock", "Abl Christian", "Air Force",],
'Points': [46, 68, 42,],
}
df_1 = pd.DataFrame(data1)
df_2 = pd.DataFrame(data2)
data_blk = {
"Blank": [""]*len(df_1["Rank"]),
}
df_blk = pd.DataFrame(data_blk)
new_df = pd.concat([df_1, df_blk], axis=1)
new_df = pd.concat([new_df, df_2], axis=1)
print(new_df.head())
将导致:
Rank Team Points Blank Rank Team Points
0 64 AR Lit Rock 35 354 AR Lit Rock 46
1 102 Abl Christian 75 284 Abl Christian 68
2 34 Air Force 45 82 Air Force 42