我有一些代码使用 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/