2017-07-21 5 views
1

私のサンプルデータセット:交換値ではない作業パンダ

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が含まれています。 私がしたい:列「ID1」の

  1. 私は「A」を交換したい列「ID」の0

  2. として1と「いいえ」と「はい」を交換したいです0

ように私は

# 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

、何かが働いているサンプルで動作していないものだと理由を把握するのは難しいだろうよく:-)実際の 'df.head()'を表示できますか? – Zero

+0

@ジョン・ガルト私の編集を参照してください、どういうわけか、これらの列には何もありません。何が起こっているのですか... – Jessica

+0

あなたはシートの構造を共有していないとき、 'pd.read_excel'を呼び出します。 – cmaher

答えて

1

ID1をきれいにしてくださいおよびID列:

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 
+0

@Jessica、 'pd.to_numeric()'が問題を解決しましたか? – MaxU

+0

ご迷惑をおかけして申し訳ありません。私が意味するのは列IDを実行するときです。 str.strip()は1のすべてが 'NaN'になりました。私はそれが正しいわけではないので、さらに続行する必要はありません。私がそのステップを踏んでpd.​​to_numeric()を実行すると、 'A's'がNaNになりました... – Jessica

+0

あなたはどこかのExcelファイル(またはその再現可能な部分)をアップロードして、ここにリンクを投稿できますか?例えば – MaxU

関連する問題