我有一个dask数据帧(df),大约有2.5亿行(来自一个10Gb的CSV文件).我有另外ndf25,000行的pandas dataframe().我想通过重复每个项目10,000次,将第一列pandas数据帧添加到dask数据帧.
这是我试过的代码.我已将问题缩小到更小的尺寸.
import dask.dataframe as dd
import pandas as pd
import numpy as np
pd.DataFrame(np.random.rand(25000, 2)).to_csv("tempfile.csv")
df = dd.read_csv("tempfile.csv")
ndf = pd.DataFrame(np.random.randint(1000, 3500, size=2500))
df['Node'] = np.repeat(ndf[0], 10)
Run Code Online (Sandbox Code Playgroud)
使用此代码,我最终得到一个错误.
ValueError:并非所有分区都已知,无法对齐分区.请用于
set_index设置索引.
我可以执行a reset_index()后跟a set_index()来df.known_divisions True生成dask数据帧.但这是一项耗时的操作.有没有更好的方法来做我想做的事情?我可以用熊猫本身做到这一点吗?
最终目标是从ndf任何相应行的位置查找df与某些条件匹配的行.
我安装了sh原生Python,并开始使用命令来安装:
$ pip install sh
Collecting sh
Could not fetch URL https://pypi.python.org/simple/sh/: There was a problem confirming the ssl
certificate: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590) - skipping
Could not find a version that satisfies the requirement sh (from versions: )
No matching distribution found for sh
Run Code Online (Sandbox Code Playgroud)
当上述失败时,我下载sh-1.12.14-py2.py3-none-any.whl安装到本地:
$ pip install
/Users/zhangkuixun/Downloads/sh-1.12.14-py2.py3-none-any.whl
Requirement
'/Users/zhangkuixun/Downloads/sh-1.12.14-py2.py3-none-any.whl' looks
like a filename, but the file does not exist
Processing ./Downloads/sh-1.12.14-py2.py3-none-any.whl
Exception:
Traceback (most recent call last):
File
"/Library/Python/2.7/site-packages/pip-8.1.2-py2.7.egg/pip/basecommand.py",
line …Run Code Online (Sandbox Code Playgroud) 我有一个 pandas 数据框和一个字典,如下所示。我想根据行索引出现在字典中的哪个列表中在数据框中创建一个新列。
df = pd.DataFrame({
'a':['x', 'y', 'z'],
'b':[1, 2, 3],
'c':[10, 20, 30],
})
df = df.set_index('a')
mydict = {
'g1':['a', 'b', 'y'],
'g2':['x', 'k', 'l'],
'g3':['m', 'l', 'z'],
}
Run Code Online (Sandbox Code Playgroud)
预期产出
b c g
a
x 1 10 g2
y 2 20 g1
z 3 30 g3
Run Code Online (Sandbox Code Playgroud)
我什至不知道如何开始解决这个问题。可以创建一个自定义函数并使用它来映射吗?但这足够性能吗?在我的实际用例中,“df”中可能有数十万行,“mydict”中可能有数百个键,每个列表将包含数万个项目。另外,我将主要处理整数而不是字符串,如此处所示。