Adding 2 Separate Dataframes into 1 csv File

问题描述 投票:0回答:2

我是 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 添加,而不是独立行动。

(抱歉,制作样表时遇到问题)

Actual sample data

在将两个数据帧放入 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 个未排序的表,按团队列排序,然后两个数据帧在连接数据帧时保持按该团队列排序。

python pandas dataframe
2个回答
0
投票

在提供样品后,我尝试了这个并且对我有用:

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

-1
投票

你似乎在暗示你的问题是关于合并这些数据集,但我认为你正在寻找的是合并后如何对数据集进行排序? 在这种情况下,请查看 docs。还是合并不正确?然后看看 pandas 的 merge 操作的 'by' 参数。

© www.soinside.com 2019 - 2024. All rights reserved.