Pandas read_csv dtype指定了所有的列,只有一列没有。[英] Pandas read_csv dtype specify all columns but one

本文是小编为大家收集整理的关于Pandas read_csv dtype指定了所有的列,只有一列没有。的处理方法,想解了Pandas read_csv dtype指定了所有的列,只有一列没有。的问题怎么解决?Pandas read_csv dtype指定了所有的列,只有一列没有。问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有一个CSV文件.我想读为字符串的大多数值,但是如果存在给定标题的列,我想将列作为布尔读.

因为CSV文件有很多列,所以我不想在每个列上指定数据类型并给出这样的内容:

data = read_csv('sample.csv', dtype={'A': str, 'B': str, ..., 'X': bool})

是否可以在每列上定义字符串类型,但一列可以同时读取可选列作为布尔?

我目前的解决方案是以下(但它非常不高,很慢):

data = read_csv('sample.csv', dtype=str) # reads all column as string
if 'X' in data.columns:
    l = lambda row: True if row['X'] == 'True' else False if row['X'] == 'False' else None
    data['X'] = data.apply(l, axis=1)

更新: 样本CSV:

A;B;C;X
a1;b1;c1;True
a2;b2;c2;False
a3;b3;c3;True

或相同的ba可以在没有" x"列的情况下(因为列是可选的):

A;B;C
a1;b1;c1
a2;b2;c2
a3;b3;c3

推荐答案

您可以首先过滤列 contains 值X带有 boolean indexing boolean indexing 然后pandas.pydata.org/pandas-docs/stable/generated/pandas.dataframe.replace.html/:

cols = df.columns[df.columns.str.contains('X')]
df[cols] = df[cols].replace({'True': True, 'False': False})

或如果需要过滤列X:

cols = df.columns[df.columns == 'X']
df[cols] = df[cols].replace({'True': True, 'False': False})

样本:

import pandas as pd

df = pd.DataFrame({'A':['a1','a2','a3'],
                   'B':['b1','b2','b3'],
                   'C':['c1','c2','c3'],
                   'X':['True','False','True']})

print (df)
    A   B   C      X
0  a1  b1  c1   True
1  a2  b2  c2  False
2  a3  b3  c3   True
print (df.dtypes)
A    object
B    object
C    object
X    object
dtype: object

cols = df.columns[df.columns.str.contains('X')]
print (cols)

Index(['X'], dtype='object')

df[cols] = df[cols].replace({'True': True, 'False': False})

print (df.dtypes)
A    object
B    object
C    object
X      bool
dtype: object
print (df)

    A   B   C      X
0  a1  b1  c1   True
1  a2  b2  c2  False
2  a3  b3  c3   True

其他推荐答案

为什么不使用bool()数据类型. bool()如果传递参数并且参数不是false,无,''或0

,则评估为true
if 'X' in data.columns:
    try:
        l = bool(data.columns['X'].replace('False', 0))
    except:
        l = None
    data['X'] = data.apply(l, axis=1)

其他推荐答案

实际上,使用PANDAS使用READ_CSV时,您不需要任何特殊处理(在版本0.17进行了测试).使用x:

的示例文件
import pandas as pd

df = pd.read_csv("file.csv", delimiter=";")
print(df.dtypes)

A    object
B    object
C    object
X      bool
dtype: object

本文地址:https://www.itbaoku.cn/post/1727973.html