首页 > 解决方案 > 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 时。这里的代码对我不起作用,不断循环并且永不停止。

任何人都可以帮忙吗?任何帮助将不胜感激!

标签: pythonpandasdataframefor-looplookup

解决方案


我希望这是您正在寻找的解决方案:

首先,我会将所有 CSVtable_1作为一个单独的 DataFrame 连接在一起。然后我会将table_2totable_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")

推荐阅读