0으로 채워진 판다 데이터 프레임 만들기
주어진 크기의 0으로 채워진 판다 데이터 프레임을 만드는 가장 좋은 방법은 무엇입니까?
사용한 적이 있습니다.
zero_data = np.zeros(shape=(len(data),len(feature_list)))
d = pd.DataFrame(zero_data, columns=feature_list)
더 좋은 방법이 있을까요?
사용해 볼 수 있습니다.
d = pd.DataFrame(0, index=np.arange(len(data)), columns=feature_list)
내 생각에 이 일은 뚱딴지와 함께 하는 것이 가장 좋습니다.
import numpy as np
import pandas as pd
d = pd.DataFrame(np.zeros((N_rows, N_cols)))
@Shravan과 비슷하지만 numpy를 사용하지 않음:
height = 10
width = 20
df_0 = pd.DataFrame(0, index=range(height), columns=range(width))
그런 다음 원하는 대로 사용할 수 있습니다.
post_instantiation_fcn = lambda x: str(x)
df_ready_for_whatever = df_0.applymap(post_instantiation_fcn)
새 데이터 프레임에 기존 데이터 프레임과 동일한 인덱스 및 열을 사용하려면 기존 데이터 프레임에 0을 곱하면 됩니다.
df_zeros = df * 0
기존 데이터 프레임에 NaNs 또는 숫자가 아닌 값이 포함된 경우 대신 0을 반환하는 함수를 각 셀에 적용할 수 있습니다.
df_zeros = df.applymap(lambda x: 0)
여기에 값이 0으로 채워진 상태에서 복사할 템플릿 DataFrame이 있다고 가정하면...
데이터 세트에 NaN이 없는 경우 0을 곱하는 것이 훨씬 빠를 수 있습니다.
In [19]: columns = ["col{}".format(i) for i in xrange(3000)]
In [20]: indices = xrange(2000)
In [21]: orig_df = pd.DataFrame(42.0, index=indices, columns=columns)
In [22]: %timeit d = pd.DataFrame(np.zeros_like(orig_df), index=orig_df.index, columns=orig_df.columns)
100 loops, best of 3: 12.6 ms per loop
In [23]: %timeit d = orig_df * 0.0
100 loops, best of 3: 7.17 ms per loop
개선은 데이터 프레임 크기에 따라 달라지지만 속도가 느려지는 경우는 없습니다.
그리고 그냥 재미로.
In [24]: %timeit d = orig_df * 0.0 + 1.0
100 loops, best of 3: 13.6 ms per loop
In [25]: %timeit d = pd.eval('orig_df * 0.0 + 1.0')
100 loops, best of 3: 8.36 ms per loop
그러나:
In [24]: %timeit d = orig_df.copy()
10 loops, best of 3: 24 ms per loop
편집!!!
float64를 사용하는 프레임을 가지고 있다고 가정하면, 이것은 큰 차이로 가장 빠를 것입니다!또한 0.0을 원하는 채우기 수로 대체하여 모든 값을 생성할 수 있습니다.
In [23]: %timeit d = pd.eval('orig_df > 1.7976931348623157e+308 + 0.0')
100 loops, best of 3: 3.68 ms per loop
취향에 따라, 특정 플로트 유형에 관계없이 외부적으로 난을 정의하고 일반적인 해결책을 수행할 수 있습니다.
In [39]: nan = np.nan
In [40]: %timeit d = pd.eval('orig_df > nan + 0.0')
100 loops, best of 3: 4.39 ms per loop
데이터 프레임이 이미 있는 경우 가장 빠른 방법은 다음과 같습니다.
In [1]: columns = ["col{}".format(i) for i in range(10)]
In [2]: orig_df = pd.DataFrame(np.ones((10, 10)), columns=columns)
In [3]: %timeit d = pd.DataFrame(np.zeros_like(orig_df), index=orig_df.index, columns=orig_df.columns)
10000 loops, best of 3: 60.2 µs per loop
비교:
In [4]: %timeit d = pd.DataFrame(0, index = np.arange(10), columns=columns)
10000 loops, best of 3: 110 µs per loop
In [5]: temp = np.zeros((10, 10))
In [6]: %timeit d = pd.DataFrame(temp, columns=columns)
10000 loops, best of 3: 95.7 µs per loop
언급URL : https://stackoverflow.com/questions/22963263/creating-a-zero-filled-pandas-data-frame
'source' 카테고리의 다른 글
Oracle SQL - 표에 없는 값 찾기 (0) | 2023.07.21 |
---|---|
SpringBoot 1.3.0은 최대 절전 모드 5를 지원합니까? (0) | 2023.07.21 |
가장 비싼 쿼리를 기록하고 찾는 방법 (0) | 2023.07.16 |
젠킨스에서 파이썬 유닛 테스트? (0) | 2023.07.16 |
음의 시간 범위 형식 지정 (0) | 2023.07.16 |