use*_*693 6 python csv dataframe pandas
我有一个CSV文件.我希望读取的大部分值都是字符串,但如果具有给定标题的列存在,我想将列读为bool.
因为CSV文件有很多列,所以我不想直接在每列上指定数据类型,并给出如下内容:
data = read_csv('sample.csv', dtype={'A': str, 'B': str, ..., 'X': bool})
Run Code Online (Sandbox Code Playgroud)
是否可以在每列上定义字符串类型但是同时将可选列作为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)
Run Code Online (Sandbox Code Playgroud)
更新:样本CSV:
A;B;C;X
a1;b1;c1;True
a2;b2;c2;False
a3;b3;c3;True
Run Code Online (Sandbox Code Playgroud)
或者同样可以没有'X'列(因为列是可选的):
A;B;C
a1;b1;c1
a2;b2;c2
a3;b3;c3
Run Code Online (Sandbox Code Playgroud)
您可以首先使用和 然后过滤列contains值:Xboolean indexingreplace
cols = df.columns[df.columns.str.contains('X')]
df[cols] = df[cols].replace({'True': True, 'False': False})
Run Code Online (Sandbox Code Playgroud)
或者如果需要过滤列X:
cols = df.columns[df.columns == 'X']
df[cols] = df[cols].replace({'True': True, 'False': False})
Run Code Online (Sandbox Code Playgroud)
样本:
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10817 次 |
| 最近记录: |