판다 데이터 프레임 열 dtype 할당
설정합니다.dtype
다중 열의 spd.Dataframe
(파일을 수정할 수 없었기 때문에 목록 목록으로 수동으로 구문 분석해야 하는 파일이 있습니다.pd.read_csv
)
import pandas as pd
print pd.DataFrame([['a','1'],['b','2']],
dtype={'x':'object','y':'int'},
columns=['x','y'])
알겠습니다
ValueError: entry not a 2- or 3- tuple
내가 설정할 수 있는 유일한 방법은 각 열 변수를 반복하고 다음을 사용하여 다시 주조하는 것입니다.astype
.
dtypes = {'x':'object','y':'int'}
mydata = pd.DataFrame([['a','1'],['b','2']],
columns=['x','y'])
for c in mydata.columns:
mydata[c] = mydata[c].astype(dtypes[c])
print mydata['y'].dtype #=> int64
더 좋은 방법이 있습니까?
0.17 이후에는 명시적 변환을 사용해야 합니다.
pd.to_datetime, pd.to_timedelta and pd.to_numeric
(아래에 언급된 바와 같이, 더 이상 "마법"은 없습니다.convert_objects
0.17에서 더 이상 사용되지 않음)
df = pd.DataFrame({'x': {0: 'a', 1: 'b'}, 'y': {0: '1', 1: '2'}, 'z': {0: '2018-05-01', 1: '2018-05-02'}})
df.dtypes
x object
y object
z object
dtype: object
df
x y z
0 a 1 2018-05-01
1 b 2 2018-05-02
변환할 각 열에 적용할 수 있습니다.
df["y"] = pd.to_numeric(df["y"])
df["z"] = pd.to_datetime(df["z"])
df
x y z
0 a 1 2018-05-01
1 b 2 2018-05-02
df.dtypes
x object
y int64
z datetime64[ns]
dtype: object
dtype이 업데이트되었는지 확인합니다.
판다에 대한 오래된/사용되지 않는 답변 0.12 - 0.16: 더 나은 d 유형을 추론하는 데 사용할 수 있습니다.
In [21]: df
Out[21]:
x y
0 a 1
1 b 2
In [22]: df.dtypes
Out[22]:
x object
y object
dtype: object
In [23]: df.convert_objects(convert_numeric=True)
Out[23]:
x y
0 a 1
1 b 2
In [24]: df.convert_objects(convert_numeric=True).dtypes
Out[24]:
x object
y int64
dtype: object
마법! (더 이상 사용되지 않는 것을 보니 슬프네요.)
당신은 판다와 함께 유형을 명시적으로 설정할 수 있습니다.DataFrame.astype(dtype, copy=True, raise_on_error=True, **kwargs)
그리고 당신이 원하는 d타입이 있는 사전을 건네줍니다.dtype
예를 들어 보겠습니다.
import pandas as pd
wheel_number = 5
car_name = 'jeep'
minutes_spent = 4.5
# set the columns
data_columns = ['wheel_number', 'car_name', 'minutes_spent']
# create an empty dataframe
data_df = pd.DataFrame(columns = data_columns)
df_temp = pd.DataFrame([[wheel_number, car_name, minutes_spent]],columns = data_columns)
data_df = data_df.append(df_temp, ignore_index=True)
당신은
In [11]: data_df.dtypes
Out[11]:
wheel_number float64
car_name object
minutes_spent float64
dtype: object
와 함께
data_df = data_df.astype(dtype= {"wheel_number":"int64",
"car_name":"object","minutes_spent":"float64"})
이제 당신은 그것이 바뀐 것을 볼 수 있습니다.
In [18]: data_df.dtypes
Out[18]:
wheel_number int64
car_name object
minutes_spent float64
나와 같은 Google(등)에서 온 사람들:
convert_objects
는 0.17 이후로 더 이상 사용되지 않습니다. 사용할 경우 다음과 같은 경고가 표시됩니다.
FutureWarning: convert_objects is deprecated. Use the data-type specific converters
pd.to_datetime, pd.to_timedelta and pd.to_numeric.
다음과 같은 작업을 수행해야 합니다.
df =
df.astype(np.float)
df["A"] =
pd.to_numeric(df["A"])
열 유형을 설정하는 또 다른 방법은 먼저 원하는 유형으로 numpy 레코드 배열을 구성하고 이를 작성한 다음 DataFrame 생성자에게 전달하는 것입니다.
import pandas as pd
import numpy as np
x = np.empty((10,), dtype=[('x', np.uint8), ('y', np.float64)])
df = pd.DataFrame(x)
df.dtypes ->
x uint8
y float64
np.arrays를 입력한 다음 데이터와 열 이름을 사전으로 전달하는 것이 좋습니다.
import numpy as np
import pandas as pd
# Feature: np arrays are 1: efficient, 2: can be pre-sized
x = np.array(['a', 'b'], dtype=object)
y = np.array([ 1 , 2 ], dtype=np.int32)
df = pd.DataFrame({
'x' : x, # Feature: column name is near data array
'y' : y,
}
)
import pandas as pd
df = pd.DataFrame([['a', '1'], ['b', '2']], columns=['x', 'y'])
# Cast a pandas object to a specified dtype
df = df.astype({'x': 'object', 'y': int})
# Check
print(df.dtypes)
당신과 비슷한 문제에 직면하고 있습니다.이 경우 수동으로 구문 분석해야 하는 Cisco 로그의 파일이 1000개 있습니다.
필드와 유형에 유연하게 대응하기 위해 String을 사용하여 성공적으로 테스트했습니다.실제로 dtype 사양에 대한 딕트를 수락하는 IO + read_cvs.
저는 보통 각 파일(5k~20k 줄)을 버퍼에 넣고 dtype 사전을 동적으로 만듭니다.
결국 나는 (범주적인...0.19) 덕분에 이러한 데이터 프레임을 큰 데이터 프레임으로 변환하여 hdf5에 덤프합니다.
이 선을 따라 무언가가
import pandas as pd
import io
output = io.StringIO()
output.write('A,1,20,31\n')
output.write('B,2,21,32\n')
output.write('C,3,22,33\n')
output.write('D,4,23,34\n')
output.seek(0)
df=pd.read_csv(output, header=None,
names=["A","B","C","D"],
dtype={"A":"category","B":"float32","C":"int32","D":"float64"},
sep=","
)
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 4 columns):
A 5 non-null category
B 5 non-null float32
C 5 non-null int32
D 5 non-null float64
dtypes: category(1), float32(1), float64(1), int32(1)
memory usage: 205.0 bytes
None
그다지 비단결적이지는 않지만... 하지만 그 일은 가능합니다.
도움이 되길 바랍니다.
제이씨
언급URL : https://stackoverflow.com/questions/21197774/assign-pandas-dataframe-column-dtypes
'programing' 카테고리의 다른 글
':app:checkDebugDuplicateClass' 작업을 실행하지 못했습니다.아이오닉 4 안드로이드 (0) | 2023.06.06 |
---|---|
ggplot2에서 글꼴 변경 (0) | 2023.06.06 |
Python: __init__ 내에서 예외를 제기하는 것은 나쁜 형식입니까? (0) | 2023.06.06 |
Android에서 URL별 ImageView를 로드하는 방법은 무엇입니까? (0) | 2023.06.06 |
데이터 목록과 함께 파이썬에서 Matplotlib을 사용하여 히스토그램을 그리는 방법은 무엇입니까? (0) | 2023.06.06 |