python - Pandas 列名打印而不是整个 DataFrame

标签 python python-3.x pandas multiprocessing

我有一些代码使用 read_sql() 创建一个生成器,并循环生成器以打印每个 block :

execute.py

import pandas as pd
from sqlalchemy import event, create_engine

engine = create_engine('path-to-driver')

def getDistance(chunk):
    print(chunk)
    print(type(chunk))

df_chunks = pd.read_sql("select top 2 * from SCHEMA.table_name", engine, chunksize=1)

for chunk in df_chunks:
    result = getDistance(chunk)

它可以工作,并且每个 block 都作为 DataFrame 打印。当我尝试用这样的多处理做同样的事情时......

outside_function.py

def getDistance(chunk):
    print(chunk)
    print(type(chunk))
    df = chunk
    return df

execute.py

import pandas as pd
from sqlalchemy import event, create_engine

engine = create_engine('path-to-driver')

df_chunks = pd.read_sql("select top 2 * from SCHEMA.table_name", engine, chunksize=1)

if __name__ == '__main__':
    global result
    p = Pool(20)
    for chunk in df_chunks:
        print(chunk)
        result = p.map(getDistance, chunk)
    p.terminate()
    p.join()

... block 在控制台中打印为类型为“str”的列名称。打印结果会显示此['column_name']

应用多处理时,为什么 block 会变成字符串,而这些字符串只是列名称?

最佳答案

这是因为 p.map 需要一个函数和一个可迭代对象。迭代数据帧(在本例中是您的 block )将生成列名称。

您需要将数据帧集合传递给 map 方法。即:

    global result
    p = Pool(20)
    result = p.map(getDistance, df_chunks)
    p.terminate()
    p.join()

关于python - Pandas 列名打印而不是整个 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55263293/

相关文章:

python pandas 使用 iloc 更改数据框单元格

python - 安装 twitter api 模块时无法加载 json 库

python - 如何更改 python 中的错误消息?

python - Python 编译器如何使用声明的编码预处理源文件?

Python - tkinter 的默认窗口引用是什么?

python - 使用 for 循环附加多个 pandas 数据帧但返回空数据帧

python - pandas.Series.explode 抛出 AttributeError

python - 在 AWS ElasticBeanstalk 上设置 Bokeh 服务器

python - F1 分数指标和分类报告 sklearn 的 F1 分数值不同

python - 远程连接不起作用。无法使用python套接字连接到服务器