python - 如果 Dask 系列包含不可散列的类型,如何将其转换为字符串类型?
问题描述
我想调用一个任意的 Dask 系列,如果它包含不可散列的类型.value_counts()
,我想将该系列转换为类型字符串。如果不需要,我不想将系列转换为字符串。我也不想在打电话.compute()
之前打电话.value_counts()
。我努力了
df = pd.DataFrame({"a":[[1], ["foo"], ["foo", "bar"]]})
df = dd.from_pandas(df, npartitions=1)
srs = df["a"]
try:
val_counts = srs.value_counts()
except TypeError:
srs = srs.astype(str)
val_counts = srs.value_counts()
val_counts.compute()
这给出了错误
类型错误:不可散列类型:“列表”
和
df = pd.DataFrame({"a":[[1], ["foo"], ["foo", "bar"]]})
df = dd.from_pandas(df, npartitions=1)
srs = df["a"]
def func(srs):
try:
val_counts = srs.value_counts()
except TypeError:
srs = srs.astype(str)
val_counts = srs.value_counts()
return val_counts
val_counts = dask.compute(func(srs))
这给出了同样的错误。
我也试过
df = pd.DataFrame({"a":[[1], ["foo"], ["foo", "bar"]]})
df = dd.from_pandas(df, npartitions=1)
srs = df["a"]
if srs.apply(lambda y: isinstance(y, list), meta=srs).any():
srs = srs.astype(str)
srs.value_counts().compute()
这给出了错误
TypeError: 试图将 dd.Scalar<series-..., type=str> 转换为布尔值。
解决方案
也许首先将列表转换为像元组这样的可散列的东西?
s.apply(tuple).value_counts() ?
推荐阅读
- apache-spark - 本地 pyspark 无法通过 AWS 凭证配置文件或环境变量访问 s3 文件?
- dart - 如何使用RouterHook保留角度飞镖组件的状态?
- javascript - 在 javascript 中读取或解析 html 文件
- reactjs - 在 React 中,如果子组件渲染,父组件是否也渲染?
- logging - 如何在 TeamCity 中观察标准输出
- javascript - 在不同函数中更新特定变量时如何使用回调
- android - 如何选择旋转视频并全屏显示?
- spring-boot - H2数据库定期损坏
- python - 如何使用 InstaPy 点赞用户的所有帖子?
- xslt - 使用 XSLT 取消引用实体