먼저 정보 (시리즈)를 int로 다시 변경하려고 시도한 다음 다시 cncat 후 float로 다시 변경되었습니다.
import pandas as pd
df1= pd.DataFrame({'a': [1,2,3, None,5,6,7,8,9,10],
'code': ['a{}'.format(i+1) for i in range(10)]})
df2 = pd.DataFrame({'code': ['a{}'.format(i+1) for i in range(5)]})
df1['a'] = pd.to_numeric(df1['a'], errors='coerce')
df1_temp = df1.dropna(subset=['a'])
df1_temp_2 = df1[df1['a'].isnull()]
df1_temp['a'] = df1_temp['a'].astype(int)
df1_a = pd.concat([df1_temp, df1_temp_2], axis=0)
df1_a.sort_index(axis=0)
df1_a
산출:
a code
0 1.0 a1
1 2.0 a2
2 3.0 a3
3 NaN a4
4 5.0 a5
5 6.0 a6
6 7.0 a7
7 8.0 a8
8 9.0 a9
9 10.0 a10
예상 :
a code
0 1 a1
1 2 a2
2 3 a3
3 NaN a4
4 5 a5
5 6 a6
6 7 a7
7 8 a8
8 9 a9
9 10 a10
좋은 제안이 있습니까? 더 짧고 더 많은 팬더 방법?
nullable 정수 데이터 유형으로 pandas 0.24+에서 가능합니다 .
df1['a'] = pd.to_numeric(df1['a'], errors='coerce').astype('Int64')
print (df1)
a code
0 1 a1
1 2 a2
2 3 a3
3 NaN a4
4 5 a5
5 6 a6
6 7 a7
7 8 a8
8 9 a9
9 10 a10
편집 : 정수를 변환하려면 read_csv
(정수가 파일에 기록 된 경우) :
df1= pd.DataFrame({'a': [1,2,3, None,5,6,7,8,9,10],
'code': ['a{}'.format(i+1) for i in range(10)]})
df1['a'] = pd.to_numeric(df1['a'], errors='coerce').astype('Int64')
df1.to_csv('test.csv', index=False)
df = pd.read_csv('test.csv', dtype={'a':'Int64'})
print (df)
a code
0 1 a1
1 2 a2
2 3 a3
3 NaN a4
4 5 a5
5 6 a6
6 7 a7
7 8 a8
8 9 a9
9 10 a10
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다