python - 从 Dask DataFrame 中删除列数不相等的行

标签 python pandas dataframe dask dask-dataframe

我有一个 CSV 文件,我想对其进行规范化以用于 SQL 输入。我想删除每一行,其中列数不等于行内的某个数字,这样我可以忽略可能发生列移位的坏行。过去,我使用 AWK 来标准化这个 CSV 数据集,但我想用 Python 实现这个程序,以便比 GNU Parallel + AWK 解决方案更容易并行化。

我尝试使用以下代码来删除行:

df.drop(df[df.count(axis='columns') != len(usecols)].index, inplace=True)
df = df[df.count(axis=1) == len(usecols)]
df = df[len(df.index) == len(usecols)] 

这些都不起作用,我需要一些帮助,谢谢!

编辑:

  • 我正在由一名工作人员处理单个 CSV 文件。

编辑2:

这是供引用的 awk 脚本:

{
    line = $0;
    # ...

    if (line ~ /^$/) next; # if line is blank, then remove it
    if (NF != 13) next; # if column count is not equal to 13, then remove it
}

最佳答案

这个问题不太好理解。从第一条语句来看,您似乎正在使用单个文件,这是正确的吗?

如果是这样,如果有未命名的列,那么 pandas (或通过 pandasdask)将尝试“修复” ' 通过添加缺少的列标签(例如“无标题:0”)来调整结构。一旦发生这种情况,可以使用以下方法轻松删除未对齐的行:

mask = df['Untitled: 0'].isna()
df = df[mask]

编辑:如果某些行包含的条目多于定义的列数,pandas 将引发错误,表示无法解析 csv。

但是,如果您正在处理多个 csv 文件,则一种选择是使用 dask.delayed 强制兼容列,请参阅 this answer以获得进一步的指导。

关于python - 从 Dask DataFrame 中删除列数不相等的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74269282/

相关文章:

python - 如何使用 python 复制 ssh-keygen 的功能

python - 使用 print (", ".join(my_array)) 提取单个字符串并将其添加到 Streamlit Markdown 中。我没有得到字符串,而是没有得到任何东西

python - 在 Pandas 中读取包含列表的 csv

python - Pandas - KeyError : columns not in index

r - 将数组操作为 BASE R 中的 data.frame

python - 嵌套字典到多索引数据帧,其中字典键是列标签

python - 使用 sympy 反转函数并评估反转函数给了我一个错误的答案

python - SQLAlchemy:具有复合主键的同一个表的多个外键

python - 在 scikit-learn 管道中插入 CalibratedClassifierCV 的正确方法是什么?

R data.frame 因子而不是级别