替换列不工作的pandas中的值

时间:2017-07-21 18:50:41

标签: pandas numpy

我的样本数据集:

import pandas as pd
import numpy as np
df = {'ID': ['A',0,0,1,'A',1],
'ID1':['Yes','Yes','No','No','Yes','Yes']}
df = pd.DataFrame(df)

我的真实数据集是从excel文件中读入的,该列是' ID1'包含'是'或者'否'。列' ID'包含1,0和' A'。 我想:

  1. 对于列' ID1'我想替换“是”'作为1和'否'为0.

  2. 列' ID'我想取代' A'为0

  3. 我尝试了以下方式

    # The values didn't change
    df['ID1']=df['ID1'].replace(['Yes', 'No'], [1, 0])
    # Or, The values didn't change
    df['ID1']=df['ID1'].replace(['Yes', 'No'], [1, 0],inplace='ignore')
    # Or,  it turns 'A' to 'nan'
    df['ID'] = df['ID'].map({1: 1, 0: 0, 'A':0})
     # OR, it turns 'A' to 'nan'
    df['ID'] = df['ID'].map({1: 1, 0: 0, 'A':0}, na_action=None)
    

    如果您运行我的示例数据集代码以获取示例数据集,我的代码可以正常工作,该数据集将系列转换为DF 但它不能用于我的真实我从excel文件中读取的数据集。我在网上搜索但无法找出原因。我的真实数据集中的这些列是对象类型,我尝试转换为字符串,但仍然无法正常工作。

    修改

    我的阅读我的真实数据集的代码:

    path =os.chdir(r"S:\path")
    
    df1 = pd.read_excel('data.xlsx',skiprows=[0]) 
    
    df1['ID']=df1['ID'].str.strip()
    df1['ID'] = df1['ID'].map({'1': 1, '0': 0, 'A':0}, na_action=None)
    
    df1['ID1']=df1['ID1'].str.strip()
    df1['ID1']=df1['ID1'].replace(['Yes', 'No'], [1, 0])
    
    df1.head()
    Out[55]: 
        ID1   ID
    0    1  NaN
    1    1  NaN
    2    1  NaN
    3    1  0.0
    4    1  NaN
    

    我已在线上传文件,请点击此链接:https://filebin.ca/3UAh5051Psnv/test.xlsx

1 个答案:

答案 0 :(得分:1)

尝试清理ID1ID列:

df['ID'] = df['ID'].astype(str).str.strip().map({'1': 1, '0': 0, 'A':0}, na_action=None)
df['ID1'] = df['ID1'].str.strip().replace(['Yes', 'No'], [1, 0])

结果:

In [234]: df
Out[234]:
    ID1  ID
0     1   1
1     1   1
2     1   1
3     1   0
4     1   1
5     1   1
6     1   0
7     1   1
8     1   1
9     1   1
10    1   1
11    1   1
12    1   1
13    1   0
14    1   1
15    1   1
16    1   0
17    1   1
18    1   1
19    1   1
20    1   1
21    1   1
22    1   1
23    1   1
24    1   1
25    1   1
26    1   1
27    1   1
28    1   1
29    1   1
30    1   1