Mam ramkę danych o nazwie dc, z kolumną „SEX”, czyli wierszami 92201.

Kiedy próbuję podbić wszystkie jedynki, dc1num=dc[dc['SEX']==1] nowa ramka danych tworzy len(dc1num)= 47614 wierszy.

Kiedy próbuję podzielić wszystkie 0, dc0num=dc[dc['SEX']==0], nowa ramka danych tworzy len(dc0num)= 40492 wierszy.

Kiedy próbuję podzielić jako ciąg wszystkie jedynki, dc1str=dc[dc['SEX']=='1'], nowa ramka danych tworzy len(dc1str)= 2130 wierszy.

Kiedy próbuję podzielić jako ciąg wszystkie 0, dc0str=dc[dc['SEX']=='0'], nowa ramka danych tworzy len(dc0str)= 1965 wierszy.

Wszystkie sumują dokładnie 47614+40492+2130+1965 = 92201 wierszy, taką samą liczbę w oryginalnym zbiorze danych. Więc oczywiście niektóre z nich mają kod 1, inne „1”; niektóre zera mają kod 0, inne „0”.

Z tych informacji wynika, że niektóre wiersze w tej kolumnie ramki danych są zakodowane jako liczby całkowite, a niektóre jako łańcuchy.

Chcę podzielić wszystkie jedynki i zera, tak więc

len(dc1)= 49,744

I

len(dc0)= 47,614

Próbowałem zrobić z nich wszystkie ciągi przez dc.SEX.apply(str0), a następnie wypróbowałem dc1=dc[dc['SEX']=='1'] i dc0=dc[dc['SEX']=='0'], ale dało to taki sam wynik jak poprzednio. Nic nie zrobiłem. Jak mam rozwiązać ten problem?

2
Nelson Chung 20 listopad 2019, 04:57

5 odpowiedzi

Posługiwać się:

dc['SEX']=dc['SEX'].astype(int)
# or dc['SEX']=dc['SEX'].astype(float)

I wtedy:

dc1num=dc[dc['SEX']==1]
dc0num=dc[dc['SEX']==0]

Możesz także zrobić:

for i,group in df.groupby('SEX'):
    print(group)
2
ansev 20 listopad 2019, 05:02

Zwykle możemy dokonać jednorazowej konwersji

df.SEX=pd.to_numeric(df.SEX)

Następnie możemy podzielić df

df1=df.query('SEX==1')
df2=df.query('SEX==0')
0
BENY 20 listopad 2019, 05:02
Yw :-) szczęśliwego kodowania
 – 
BENY
20 listopad 2019, 05:05

Aby przekonwertować dane do formatu łańcuchowego, spróbuj użyć poniższej funkcji; sposób, w jaki dzwonisz, nie działa.

df['A'] = df['A'].astype(str)
0
Kris 20 listopad 2019, 05:03

Sposób, który zadziała z liczbami niecałkowitymi, takimi jak:

df['SEX'] = pd.to_numeric(df['SEX'], errors='coerce')
0
U12-Forward 20 listopad 2019, 05:07

Rozwiązanie 1: zamień wszystkie wartości w kolumnie na liczby całkowite

Df ['kol1'] = df ['kol1']. astype (int)

        (OR)

Importuj pandy jako pd df ['col1'] = pd.to_numeric (df ['co11'])

Rozwiązanie 2: zamień wszystkie wartości w kolumnie na ciąg Przykład: df ['col1'] = df.col1.apply (str)

Jedno z powyższych rozwiązań powinno działać

0
20 listopad 2019, 20:02