日常小知識點積累:python list列表推導式、pandas.get_dummies、pandas.DataFrame.dtypes
1.列表推導式基本形式:
result = [item for item in squence <if conditions>]
舉例:在以下球員姓名名單中找出名字中含有字母‘a’的球員
roster = ['Irving','Hayward','Horford','Tatum','Jaylen','Rozier','Smart'] contains_a = [i for i in roster if 'a' in i] contains_a >>>['Hayward', 'Tatum', 'Jaylen', 'Smart']
2.pandas.get_dummies:
pandas提供的這個方法用於給類別型變數進行one-hot或dummy編碼(二者差別:dummy少用一個維度的變數來表示和one-hot編碼相同的資訊量,具體請見https://blog.csdn.net/weixin_41712499/article/details/82657296)
pandas.
get_dummies
(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False,drop_first=False, dtype=None)
說說裡面幾個引數的意義:
- prefix:string, list of strings, or dict of strings.
字首,即你進行one-hot編碼後多出來的幾列特徵,其列名字首。
- dummy_na : bool, default False
若這個引數設定為True,則NaN項也會被作為一個特徵取值進行one-hot編碼
- columns : list-like, default None
想要被進行one-hot編碼的特徵的列名集合。當columns = None,則預設所有dtype為object的資料均進行one-hot編碼
- drop_first : bool, default False
若True,則進行one-hot編碼的這個特徵(假設有離散的k個取值)被轉化成k個one-hot特徵,即one-hot編碼;
若False,則進行one-hot編碼的這個特徵(假設有離散的k個取值)被轉化成k-1個one-hot特徵,即dummy編碼;
3.pandas.DataFrame.dtypes:
pandas提供的這個方法用於返回這個DataFrame中所有列的dtype,以一個pandas.Series形式返回。這個Series的index就是DataFrame的各列名。
- 常見的pandas資料dtype:
dft = pd.DataFrame(dict(A = np.random.rand(3), B = 1, C = 'foo',D = pd.Timestamp('20010102'), E = pd.Series([1.0]*3).astype('float32'),F = False, G = pd.Series([1]*3,dtype='int8'))) print(dft) A B C D E F G 0 0.809585 1 foo 2001-01-02 1.0 False 1 1 0.128238 1 foo 2001-01-02 1.0 False 1 2 0.775752 1 foo 2001-01-02 1.0 False 1 print(dft.dtypes) A float64 B int64 C object D datetime64[ns] E float32 F bool G int8 dtype: object
請注意:各資料型別的混合列,dtype = 'object'; 我們可以用dtype == ‘object’來挑選categorical資料,因為它們的特徵值大多都是字串格式的。