1. Pandas Datenkonvertierungsfunktionen: Zuordnen, Anwenden, Anwenden der Karte
Vergleich der Datenkonvertierungsfunktionen: Map, Apply, Applymap:
- Karte: Wird nur für Serien verwendet, um die Zuordnung jedes Werts zu implementieren --> Wert:
- Anwenden: Wird für Serien verwendet, um die Verarbeitung jedes Werts zu implementieren, und für Dataframe, um die Verarbeitung von Serien für eine bestimmte Achse zu implementieren.
- applymap: Kann nur für DataFrame verwendet werden und wird zum Verarbeiten jedes Elements des DataFrame verwendet
2. Map wird zum Konvertieren von Serienwerten verwendet.
Beispiel: Konvertieren Sie den englischen Namen des Aktiencodes in einen chinesischen Namen
Series.map(dict) or Series.map(function)
fpath = '/Users/python/Desktop/means/ml-25m/互联网公司股票.xlsx'
df = pd.read_excel(fpath)
df.head()
日期 公司 收盘 开盘 高 低 交易量 涨跌幅
0 2019-10-03 BIDU 104.32 102.35 104.73 101.15 2.24 0.02
1 2019-10-02 BIDU 102.62 100.85 103.24 99.50 2.69 0.01
2 2019-10-01 BIDU 102.00 102.80 103.26 101.00 1.78 -0.01
3 2019-10-03 BABA 169.48 166.65 170.18 165.00 10.39 0.02
4 2019-10-02 BABA 165.77 162.82 166.88 161.90 11.60 0.00
获取公司的种类
df['公司'].unique()
array(['BIDU', 'BABA', 'IQ', 'JD'], dtype=object)
# 定义基本的映射关系:公司股票代码映射到中文,注意:这里是小写
df_company_names = {
'bidu': '百度',
'baba': '阿里巴巴',
'iq': '爱奇艺',
'jd': '京东'
}
第一种: Series.map(dict)
df 后面添加一列中文公司1,使用了Series.map(dict)
首先获取df公司列的数据,然后将其转位小写,最后使用map函数做一下关系映射
df['中文公司'] = df['公司'].str.lower().map(df_company_names)
第二种:Series.map(func)
function的参数是Series的每个元素的值
df['中文公司'] = df['公司'].str.lower().map(lambda x: df_company_names[x.lower()])
日期 公司 收盘 开盘 高 低 交易量 涨跌幅 中文公司
0 2019-10-03 BIDU 104.32 102.35 104.73 101.15 2.24 0.02 百度
1 2019-10-02 BIDU 102.62 100.85 103.24 99.50 2.69 0.01 百度
2 2019-10-01 BIDU 102.00 102.80 103.26 101.00 1.78 -0.01 百度
3 2019-10-03 BABA 169.48 166.65 170.18 165.00 10.39 0.02 阿里巴巴
4 2019-10-02 BABA 165.77 162.82 166.88 161.90 11.60 0.00 阿里巴巴
3. Apply wird für die Konvertierung von Serien und DataFrame verwendet
Series.apply(function),函数的参数是每个值
DataFrame.apply(function),函数的参数是Series
Series.apply(function)
Der Parameter der Funktion ist jeder Wert von Series
Wenn es sich um eine Series handelt, ist Series.map mit Series.apply identisch选取df['公司'] Series.apply(func) x为Series的值 df['中文公司'] = df['公司'].apply(lambda x: df_company_names[x.lower()]) 日期 公司 收盘 开盘 高 低 交易量 涨跌幅 中文公司 0 2019-10-03 BIDU 104.32 102.35 104.73 101.15 2.24 0.02 百度 1 2019-10-02 BIDU 102.62 100.85 103.24 99.50 2.69 0.01 百度 2 2019-10-01 BIDU 102.00 102.80 103.26 101.00 1.78 -0.01 百度 3 2019-10-03 BABA 169.48 166.65 170.18 165.00 10.39 0.02 阿里巴巴 4 2019-10-02 BABA 165.77 162.82 166.88 161.90 11.60 0.00 阿里巴巴
DataFrame.apply(function)
Der Parameter der Funktion ist die Reihe, die der Achse entsprichtdf为DataFrame;axis==1为扫描跨列;x为Series每个列的名字,x['公司']为取出列的值; 设置 columns axis==1; 设置 index axis==0 df['中文公司'] = df.apply(lambda x: df_company_names[x['公司'].lower()], axis=1) 日期 公司 收盘 开盘 高 低 交易量 涨跌幅 中文公司 0 2019-10-03 BIDU 104.32 102.35 104.73 101.15 2.24 0.02 百度 1 2019-10-02 BIDU 102.62 100.85 103.24 99.50 2.69 0.01 百度 2 2019-10-01 BIDU 102.00 102.80 103.26 101.00 1.78 -0.01 百度 3 2019-10-03 BABA 169.48 166.65 170.18 165.00 10.39 0.02 阿里巴巴 4 2019-10-02 BABA 165.77 162.82 166.88 161.90 11.60 0.00 阿里巴巴
4. Applymap wird zum Konvertieren aller Werte von DataFrame verwendet
sub_df = df[['收盘', '开盘', '高', '低', '交易量']]
sub_df.head()
收盘 开盘 高 低 交易量
0 104.32 102.35 104.73 101.15 2.24
1 102.62 100.85 103.24 99.50 2.69
2 102.00 102.80 103.26 101.00 1.78
3 169.48 166.65 170.18 165.00 10.39
4 165.77 162.82 166.88 161.90 11.60
将sub_df中的所有值,获取整数,适用于所有元素
sub_df.applymap(lambda x: int(x))
收盘 开盘 高 低 交易量
0 104 102 104 101 2
1 102 100 103 99 2
2 102 102 103 101 1
3 169 166 170 165 10
4 165 162 166 161 11
5 165 168 168 163 14
6 16 15 16 15 10
7 15 15 15 15 8
8 15 16 16 15 11
9 28 28 28 27 8
10 28 28 28 27 9
11 28 28 28 27 10
把新的sub_df的列赋值给原来的df相同的列
df.loc[:, ['收盘', '开盘', '高', '低', '交易量']] = sub_df.applymap(lambda x: int(x))
日期 公司 收盘 开盘 高 低 交易量 涨跌幅 中文公司
0 2019-10-03 BIDU 104.0 102.0 104.0 101.0 2.0 0.02 百度
1 2019-10-02 BIDU 102.0 100.0 103.0 99.0 2.0 0.01 百度
2 2019-10-01 BIDU 102.0 102.0 103.0 101.0 1.0 -0.01 百度
3 2019-10-03 BABA 169.0 166.0 170.0 165.0 10.0 0.02 阿里巴巴
4 2019-10-02 BABA 165.0 162.0 166.0 161.0 11.0 0.00 阿里巴巴