source

판다: 시리즈의 데이터 유형을 문자열로 변경

lovecheck 2023. 6. 11. 10:58
반응형

판다: 시리즈의 데이터 유형을 문자열로 변경

Pandas 'ver 0.12.0'을 Python 2.7과 함께 사용하며 아래와 같은 데이터 프레임을 사용합니다.

df = pd.DataFrame({'id' : [123,512,'zhub1', 12354.3, 129, 753, 295, 610],
                    'colour': ['black', 'white','white','white',
                            'black', 'black', 'white', 'white'],
                    'shape': ['round', 'triangular', 'triangular','triangular','square',
                                        'triangular','round','triangular']
                    },  columns= ['id','colour', 'shape'])

id영상 시리즈는 일부 정수와 문자열로 구성됩니다.그것의.dtype기본값은 입니다.object의 모든 내용을 변환합니다.id현악기에 맞추어나는 노력했다.astype(str)아래의 출력을 생성합니다.

df['id'].astype(str)
0    1
1    5
2    z
3    1
4    1
5    7
6    2
7    6

의 모든 요소를 변환하려면 어떻게 해야 합니까?id스트링으로?

나중에 사용할 입니다.id데이터 프레임의 인덱싱에 사용됩니다.정수 인덱스와 비교하여 데이터 프레임에 문자열 인덱스가 있으면 속도가 느려집니까?

가장 최근의 관행을 반영하는 새로운 답변: 현재(v1.2.4), 어느 것도.astype('str')도 아니다astype(str)일하다.

설명서에 따르면 시리즈는 다음과 같은 방법으로 문자열 데이터 유형으로 변환할 수 있습니다.

df['id'] = df['id'].astype("string")

df['id'] = pandas.Series(df['id'], dtype="string")

df['id'] = pandas.Series(df['id'], dtype=pandas.StringDtype)

ID의 모든 요소를 다음으로 변환할 수 있습니다.str사용.apply

df.id.apply(str)

0        123
1        512
2      zhub1
3    12354.3
4        129
5        753
6        295
7        610

OP로 편집:

저는 이 문제가 파이썬 버전(2.7)과 관련이 있다고 생각합니다. 이것은 효과가 있었습니다.

df['id'].astype(basestring)
0        123
1        512
2      zhub1
3    12354.3
4        129
5        753
6        295
7        610
Name: id, dtype: object

다음과 같이 할당해야 합니다.

df['id']= df['id'].astype(str)

개인적으로 위의 것들 중 어느 것도 저에게 맞지 않았습니다.수행한 작업:

new_str = [str(x) for x in old_obj][0]

사용할 수 있는 항목:

df.loc[:,'id'] = df.loc[:, 'id'].astype(str)

이것이 그들이 이 해결책을 추천하는 이유입니다: Pandas doc.

TD;LR

일부 답변 반영하기

df['id'] = df['id'].astype("string")

이는 'string'의 숫자를 처리할 수 없는 StringArray로 변환하려고 하므로 지정된 예에서 중단됩니다.

df['id']= df['id'].astype(str)

이 솔루션은 다음과 같은 경고를 제공합니다.

> SettingWithCopyWarning:  
> A value is trying to be set on a copy of a
> slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead

두 가지 가능성이 있습니다.

  • 사용하다.astype("str").astype("string")여기서 보는 바와 같이
  • 사용하다.astype(pd.StringDtype())공식 문서에서

저에게는 효과가 있었습니다.

 df['id'].convert_dtypes()

다음 문서를 참조하십시오.

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.convert_dtypes.html

판다 끈 사용법 iedf['id'].str.cat()

동적으로 수행하려면

df_obj = df.select_dtypes(include='object')
df[df_obj.columns] = df_obj.astype(str)

먼저 객체로 변환하면 문제를 쉽게 해결할 수 있습니다.개체로 변환된 후 "유형"을 사용하여 str로 변환합니다.

obj = lambda x:x[1:]
df['id']=df['id'].apply(obj).astype('str')

나를 위해 .to_string이 일했습니다.

df['id']=df['id'].to_string()

언급URL : https://stackoverflow.com/questions/22231592/pandas-change-data-type-of-series-to-string

반응형