簡體   English   中英

改善熊貓tolist()的性能

[英]Improving on pandas tolist() performance

我對200列的熊貓數據框執行以下操作大約需要1s秒鍾:

for col in mycols:
    values = [str(_item) if col_raw_type == 'object' else '{:f}'.format(_item) 
     for _item in df[col_name].dropna().tolist() 
     if (_item is not None) and str(_item)]

有沒有更好的方法來做到這一點? 似乎tolist操作有點慢?

我在這里想要做的是轉換類似:

field         field2
'2014-01-01'  1.0000000
'2015-01-01'  nan

變成這樣的東西:

values_of_field_1 = ['2014-01-01', '2015-01-01']
values_of_field_2 = [1.00000,]

因此,我可以推斷出列的類型。 例如,我想要的最終產品將是:

type_of_field_1 = DATE # %Y-%m-%d
type_of_field_2 = INTEGER #

似乎您正在嘗試將DataFrame中的整個SeriesDataFrame為特定類型。 以該DataFrame為例:

>>> import pandas as pd
>>> import numpy as np

用混合類型的列創建一個DataFrame:

>>> df = pd.DataFrame({'a': [1, np.nan, 2, 'a', None, 'b'], 'b': [1, 2, 3, 4, 5, 6], 'c': [np.nan, np.nan, 2, 2, 'a', 'a']})
>>> df
      a  b    c
0     1  1  NaN
1   NaN  2  NaN
2     2  3    2
3     a  4    2
4  None  5    a
5     b  6    a
>>> df.dtypes
a    object
b     int64
c    object
dtype: object
>>> for col in df.select_dtypes('object'):
...     print(col)
...     print('\n'.join('{}: {}'.format(v, type(v)) for v in df[col]))
... 
a
1: <class 'int'>
nan: <class 'float'>
2: <class 'int'>
a: <class 'str'>
None: <class 'NoneType'>
b: <class 'str'>
c
nan: <class 'float'>
nan: <class 'float'>
2: <class 'int'>
2: <class 'int'>
a: <class 'str'>
a: <class 'str'>

使用pd.Series.astypeobject dtype轉換為str

>>> for col in df.select_dtypes('object'):
...     df[col] = df[col].astype(str)
...     print(col)
...     print('\n'.join('{}: {}'.format(v, type(v)) for v in df[col]))
... 
a
1: <class 'str'>
nan: <class 'str'>
2: <class 'str'>
a: <class 'str'>
None: <class 'str'>
b: <class 'str'>
c
nan: <class 'str'>
nan: <class 'str'>
2: <class 'str'>
2: <class 'str'>
a: <class 'str'>
a: <class 'str'>

如果您認為tolist()使代碼運行緩慢,則可以刪除tolist()。 根本不需要使用tolist()。 下面的代碼將為您提供相同的輸出。

for col in mycols:
    values = [str(_item) if col_raw_type == 'object' else '{:f}'.format(_item) 
     for _item in df[col_name].dropna()
     if (_item is not None) and str(_item)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM