python - 특정값 - 파이썬 데이터프레임 데이터 타입 변경




판다에서 열의 데이터 유형 변경 (4)

목록 목록으로 표시된 표를 팬더 DataFrame으로 변환하고 싶습니다. 극히 단순화 된 예로서 :

a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']]
df = pd.DataFrame(a)

열을 적절한 유형으로 변환하는 가장 좋은 방법은 무엇입니까?이 경우 열 2와 열 3을 수레로 변환 하시겠습니까? DataFrame으로 변환하는 동안 유형을 지정하는 방법이 있습니까? 또는 먼저 DataFrame을 만든 다음 열을 반복하여 각 열의 유형을 변경하는 것이 더 낫습니까? 이상적으로 나는 수백 가지 열이있을 수 있고 어떤 열이 어떤 유형인지 정확하게 지정하고 싶지 않기 때문에 이것을 동적 인 방식으로하고 싶습니다. 내가 보장 할 수있는 것은 각 열에 같은 유형의 값이 들어 있다는 것입니다.


각 열에 대해 서로 다른 데이터 유형을 가진 두 개의 데이터 프레임을 만든 다음 함께 추가하는 방법은 무엇입니까?

d1 = pd.DataFrame(columns=[ 'float_column' ], dtype=float)
d1 = d1.append(pd.DataFrame(columns=[ 'string_column' ], dtype=str))

결과

In[8}:  d1.dtypes
Out[8]: 
float_column     float64
string_column     object
dtype: object

데이터 프레임을 만든 후에는 첫 번째 열의 부동 소수점 변수와 두 번째 열의 문자열 (또는 원하는 모든 데이터 유형)을 채울 수 있습니다.


다음은 인수로 DataFrame과 열 목록을 가져 와서 열의 모든 데이터를 숫자로 강제 변환하는 함수입니다.

# df is the DataFrame, and column_list is a list of columns as strings (e.g ["col1","col2","col3"])
# dependencies: pandas

def coerce_df_columns_to_numeric(df, column_list):
    df[column_list] = df[column_list].apply(pd.to_numeric, errors='coerce')

따라서, 귀하의 예를 들면 :

import pandas as pd

def coerce_df_columns_to_numeric(df, column_list):
    df[column_list] = df[column_list].apply(pd.to_numeric, errors='coerce')

a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']]
df = pd.DataFrame(a, columns=['col1','col2','col3'])

coerce_df_columns_to_numeric(df, ['col2','col3'])

이것은 어떤가요?

a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']]
df = pd.DataFrame(a, columns=['one', 'two', 'three'])
df
Out[16]: 
  one  two three
0   a  1.2   4.2
1   b   70  0.03
2   x    5     0

df.dtypes
Out[17]: 
one      object
two      object
three    object

df[['two', 'three']] = df[['two', 'three']].astype(float)

df.dtypes
Out[19]: 
one       object
two      float64
three    float64

특정 열을 지정하기 astype() 되고 명시 적으로 사용하려면 다음과 같이 사용했습니다 ( astype() 당).

dataframe = dataframe.astype({'col_name_1':'int','col_name_2':'float64', etc. ...})

그래서, 원래의 질문을 사용하지만 그것에 열 이름을 제공 ...

a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']]
df = pd.DataFrame(a, columns=['col_name_1', 'col_name_2', 'col_name_3'])
df = df.astype({'col_name_2':'float64', 'col_name_3':'float64'})




casting