gpt4 book ai didi

python - 当内存有问题时如何读取大型 csv 或数据库并连接列?

转载 作者:搜寻专家 更新时间:2023-10-30 20:34:10 24 4
gpt4 key购买 nike

我有一个从 Data.Medicare.gov ( https://data.medicare.gov/Physician-Compare/Physician-Compare-National-Downloadable-File/mj5m-pzi6 ) 中提取的大型数据集

这是所有医生的简历(240 万行 x 41 列,750MB),我们称之为 physician_df,但是,我无法加载到计算机的内存中(内存错误)。

我在内存中加载了另一个 df (summary_df),我想加入来自 physician_df 的列(NPI、姓氏、名字)。

有没有办法不用将数据加载到内存中就可以做到这一点?我首先尝试使用他们的 API,但我被限制了(我的最终 df 中有大约 500k 行,而且这将一直在变化)。将 physician_df 存储到 SQL 数据库中会使这更容易吗?

这是每个 df 的片段(仅供引用,summary_df 都是假信息)。

摘要_df

DOS        Readmit    SurgeonNPI   
1-1-2018 1 1184809691
2-2-2018 0 1184809691
2-5-2017 1 1093707960

医生_df

NPI          PAC ID      Professional Enrollment   LastName FirstName
1184809691 2668563156 I20120119000086 GOLDMAN SALUJA
1184809691 4688750714 I20080416000055 NOLTE KIMBERLY
1093707960 7618879354 I20040127000771 KHANDUJA KARAMJIT

最终 df:

DOS        Readmit    SurgeonNPI  LastName FirstName
1-1-2018 1 1184809691 GOLDMAN SALUJA
2-2-2018 0 1184809691 GOLDMAN SALUJA
2-5-2017 1 1093707960 KHANDUJA KARAMJIT

如果我可以加载 physician_df 那么我会使用下面的代码..

pandas.merge(summary_df, physician_df, how='left', left_on=['SurgeonNPI'], right_on=['NPI'])

最佳答案

对于您想要的输出,您只需要 physician_df 中的 3 列。与 5 列(或者,当然,所有 41 列)相比,3 列的 2.4mio 行更可能适合内存。

所以我会首先尝试从 3 列数据集中提取您需要的内容,转换为字典,然后使用它来映射所需的列。

请注意,为了产生您想要的输出,有必要从 physicians_df 中删除重复项(首先保留),因此我包含了这个逻辑。

from operator import itemgetter as iget

d = pd.read_csv('physicians.csv', columns=['NPI', 'LastName', 'FirstName'])\
.drop_duplicates('NPI')\
.set_index('NPI')[['LastName', 'FirstName']]\
.to_dict(orient='index')

# {1093707960: {'FirstName': 'KARAMJIT', 'LastName': 'KHANDUJA'},
# 1184809691: {'FirstName': 'SALUJA', 'LastName': 'GOLDMAN'}}

df_summary['LastName'] = df_summary['SurgeonNPI'].map(d).map(iget('LastName'))
df_summary['FirstName'] = df_summary['SurgeonNPI'].map(d).map(iget('FirstName'))

# DOS Readmit SurgeonNPI LastName FirstName
# 0 1-1-2018 1 1184809691 GOLDMAN SALUJA
# 1 2-2-2018 0 1184809691 GOLDMAN SALUJA
# 2 2-5-2017 1 1093707960 KHANDUJA KARAMJIT

如果您的最终数据帧太大而无法存储在内存中,那么我会考虑以下选项:

关于python - 当内存有问题时如何读取大型 csv 或数据库并连接列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49477999/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com