python - Pandas DataFrame 查找循环:for 循环不会停止运行
问题描述
我正在尝试查找某个列上的值并根据该查找复制剩余的列。问题是,这个操作的行数超过了 2000 万行。
我试图运行代码,但它没有停止大约 8 个小时,然后我停止了它。我的问题是:
我的算法正确吗?如果正确,这种不停运行的原因是否是由于我的算法效率低下?
这是我的代码和表格来说明:
表格1
一种 | 乙 |
---|---|
12 | 美国广播公司 |
13 | 定义 |
28 | 吉 |
50 | jkl |
表 2(查找此表)
乙 | C | D |
---|---|---|
美国广播公司 | 4 | 7 |
定义 | 3 | 3 |
吉 | 6 | 2 |
jkl | 8 | 1 |
目标结果
一种 | 乙 | C | D |
---|---|---|---|
12 | 美国广播公司 | 4 | 7 |
13 | 定义 | 3 | 3 |
28 | 吉 | 6 | 2 |
50 | jkl | 8 | 1 |
因此,C 和 D 列也将添加到表 1,但查找 B 列的表 2
表 1 中的这个值位于不同的 CSV 文件中,因此我还遍历了文件夹中的文件。我将目录命名为all_files
代码中的名称。于是,抬头一看
我的代码:
df = pd.DataFrame()
for f in all_files:
Table1 = pd.read_csv(all_files[f])
for j in range(len(Table1)):
u = Table1.loc[j,'B']
for z in range(len(Table2)):
if u == Table2.loc[z,'B']:
Table1.loc[j,'C'] = Table2.loc[z,'C']
Table1.loc[j,'D'] = Table2.loc[z,'D']
break
df = pd.concat([df,Table1],axis=0)
我在最后使用了那个 break 来停止循环,当它找到相同的值并且 Table1 连接到 df 时。这里的代码对我不起作用,不断循环并且永不停止。
任何人都可以帮忙吗?任何帮助将不胜感激!
解决方案
我希望这是您正在寻找的解决方案:
首先,我会将所有 CSVtable_1
作为一个单独的 DataFrame 连接在一起。然后我会将table_2
totable_1
与 B 列的键合并。示例代码:
df = pd.DataFrame()
for file in all_file:
df_tmp = pd.read_csv(file)
df = pd.concat([df, df_tmp])
df_merge = pd.merge(df, table_2, on="B", how="left")
推荐阅读
- python - 如何在mac上将python3.9设置为python3的默认值?
- javascript - 按钮在第一次点击时没有反应
- java - Java:返回 Int 值/多个值
- flexbox - flex-wrap:wrap 行不换行
- amazon-web-services - 使用 S3 + Glue + Athena 分析来自 EventBridge 的所有事件
- gradle - gradle 官方支持 johnrengleman 影子插件吗?
- c# - MVC 中的数据注释,按钮单击时未显示必需
- mysql - 如何选择借阅最多的书种
- c# - 将数据插入数据库时实体框架中的验证错误
- nix - vim 插件的自定义 Nix 派生失败