目录
read_csv
- 如果你要读取的数据量很大时,你可以尝试使用一下这个参数:nrows = 5。
- df.columns.tolist() 提取所有列,使用 usecols = [’ c1 ', ’ c2 ',…] 参数来加载所需的列
- 如果你知道特定列的数据类型,还可以通过添加参数 dtype = {’ c1 ': str, ’ c2 ': int,…},这样加载速度会更快。
- 其中上述第三点特别重要,因为如果同时存在包含字符串和数字的列,那么将类型作以声明是一个很好的方法,当使用该列作为 key 合并表时就不会出现错误。
import pandas as pd
df = pd.read_csv('./data/打分前20商户基本信息+打分.csv', encoding= 'gbk',
nrows = 5)
df
MERC_ID | SUP_MCC_NM | MCC_NM | STL_OAC | WC_LBNK_NO | BUS_LIC_NO | CRP_ID_NO | LEGAL_AREA | LEGAL_SEX | LEGAL_AGE | ... | score_cnt_3_6 | score_cnt_6_12 | score_day_bf_m6 | score_year_bf | score_fail_cnt_per | score_fail_amt_per | score_ow_cnt_per_m3 | stable_score | grow_score | final_score | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 8.002900e+14 | 餐娱类 | 就餐场所和餐馆 | 621226****1423 | 1.022900e+11 | 91310115***E641 | 47DC90091B6BBE476E78E5D5AA1A9F3B | 510213 | 女 | 37 | ... | 66.490134 | 100 | 79.734951 | 91.149570 | 99.500649 | 99.437362 | 100.000000 | 83.772512 | 88.644849 | 95.650519 |
1 | 8.003910e+14 | 餐娱类 | 就餐场所和餐馆 | 621786****4862 | 1.043910e+11 | 35010260***3292 | 8E5E44B72135FE97C190E6EBF6BF9DDA | 350121 | 男 | 46 | ... | 70.229582 | 100 | 71.096137 | 72.676023 | 98.277708 | 97.254613 | 94.314502 | 81.791015 | 89.871021 | 95.545835 |
2 | 8.005520e+14 | 餐娱类 | 就餐场所和餐馆 | 622202****6985 | 1.025520e+11 | 91430211***0968 | 21EB44C8A0D2FC3ED5FF17457F2C8021 | 430202 | 男 | 32 | ... | 74.732512 | 100 | 68.917341 | 76.515809 | 95.516478 | 90.725373 | 100.000000 | 84.666181 | 93.099689 | 96.664641 |
3 | 8.004910e+14 | 一般类 | 光学产品、眼镜店 | 621081****7341 | 1.054910e+11 | 91410104***9496 | 1D29F6A6EEEE7147BBA0B500A41134FD | 410402 | 男 | 53 | ... | 71.365266 | 100 | 57.732148 | 76.375912 | 96.733301 | 93.707047 | 100.000000 | 84.586050 | 92.185113 | 96.573539 |
4 | 8.002900e+14 | 一般类 | 皮货店 | 622908****0571 | 3.092900e+11 | 91310116***5552 | E63E2E63D5399EF2BA7C28F4E3D720C7 | 332502 | 女 | 41 | ... | 64.289203 | 100 | 76.493775 | 85.980428 | 94.189257 | 93.225704 | 100.000000 | 84.829916 | 90.689888 | 96.134069 |
5 rows × 44 columns
df_col = df.columns.tolist()
df_col
['MERC_ID',
'SUP_MCC_NM',
'MCC_NM',
'STL_OAC',
'WC_LBNK_NO',
'BUS_LIC_NO',
'CRP_ID_NO',
'LEGAL_AREA',
'LEGAL_SEX',
'LEGAL_AGE',
'CRP_PHONE',
'STOE_ID',
'STOE_CNT_TEL',
'SIG_DT',
'BUS_EXP_DT',
'行业',
'score_SIG_DT',
'score_act_per_m12',
'score_act_per_m3',
'score_act_per_m6',
'score_amt_1_3',
'score_amt_3_6',
'score_amt_6_12',
'score_amt_active_day_m12',
'score_amt_active_day_m3',
'score_amt_active_day_m6',
'score_amt_m1',
'score_amt_m12',
'score_amt_m3',
'score_amt_m6',
'score_amt_single_1_3',
'score_amt_single_3_6',
'score_amt_single_6_12',
'score_cnt_1_3',
'score_cnt_3_6',
'score_cnt_6_12',
'score_day_bf_m6',
'score_year_bf',
'score_fail_cnt_per',
'score_fail_amt_per',
'score_ow_cnt_per_m3',
'stable_score',
'grow_score',
'final_score']
df_ = pd.read_csv('./data/打分前20商户基本信息+打分.csv', encoding= 'gbk', usecols=df_col[:5])
df_
MERC_ID | SUP_MCC_NM | MCC_NM | STL_OAC | WC_LBNK_NO | |
---|---|---|---|---|---|
0 | 8.002900e+14 | 餐娱类 | 就餐场所和餐馆 | 621226****1423 | 1.022900e+11 |
1 | 8.003910e+14 | 餐娱类 | 就餐场所和餐馆 | 621786****4862 | 1.043910e+11 |
2 | 8.005520e+14 | 餐娱类 | 就餐场所和餐馆 | 622202****6985 | 1.025520e+11 |
3 | 8.004910e+14 | 一般类 | 光学产品、眼镜店 | 621081****7341 | 1.054910e+11 |
4 | 8.002900e+14 | 一般类 | 皮货店 | 622908****0571 | 3.092900e+11 |
5 | 8.004910e+14 | 一般类 | 光学产品、眼镜店 | 621081****7341 | 1.054910e+11 |
6 | 8.002900e+14 | 一般类 | 百货商店 | 622848****8747 | 1.032900e+11 |
7 | 8.003050e+14 | 一般类 | 各类服装及饰物店 | 621691****2716 | 3.053050e+11 |
8 | 8.003050e+14 | 一般类 | 百货商店 | 622848****0611 | 1.033050e+11 |
9 | 8.004910e+14 | 一般类 | 光学产品、眼镜店 | 621081****7341 | 1.054910e+11 |
10 | 8.004910e+14 | 一般类 | 光学产品、眼镜店 | 621081****7341 | 1.054910e+11 |
11 | 8.005880e+14 | 一般类 | 百货商店 | 622848****1291 | 1.035880e+11 |
12 | 8.007130e+14 | 一般类 | 未列入其他代码的商业服务 | 623094****6704 | 1.057140e+11 |
13 | 8.004910e+14 | 餐娱类 | 就餐场所和餐馆 | 622908****3831 | 3.094910e+11 |
14 | 8.005530e+14 | 一般类 | 成人成衣店 | 622848****8717 | 1.035580e+11 |
15 | 8.001730e+14 | 餐娱类 | 就餐场所和餐馆 | 621798****2745 | 4.031730e+11 |
16 | 8.004920e+14 | 一般类 | 家庭服装商店 | 621786****6762 | 1.044910e+11 |
17 | 8.005810e+14 | 一般类 | 成人成衣店 | 622846****0817 | 1.035810e+11 |
18 | 8.005810e+14 | 餐娱类 | 就餐场所和餐馆 | 621491****2576 | 3.035810e+11 |
19 | 8.002900e+14 | 餐娱类 | 就餐场所和餐馆 | 436462****5998 | 1.042900e+11 |
select_dtypes
import pandas as pd
df.dtypes.value_counts()
float64 24
int64 11
object 9
dtype: int64
df.select_dtypes(include=['int64'])
LEGAL_AREA | LEGAL_AGE | SIG_DT | BUS_EXP_DT | score_amt_1_3 | score_amt_6_12 | score_amt_m1 | score_amt_single_1_3 | score_amt_single_6_12 | score_cnt_1_3 | score_cnt_6_12 | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 510213 | 37 | 20170426 | 20460124 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
1 | 350121 | 46 | 20170522 | 20250522 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
2 | 430202 | 32 | 20170620 | 99991231 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
3 | 410402 | 53 | 20170801 | 20220613 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
4 | 332502 | 41 | 20170809 | 20220610 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
copy
详情见Python中三种copy
map函数
总结:
- 特别好用 经常对DataFrame的一列使用map函数
- 其中map里面既可以是函数 也可以是一个字典
df
MERC_ID | SUP_MCC_NM | MCC_NM | STL_OAC | WC_LBNK_NO | BUS_LIC_NO | CRP_ID_NO | LEGAL_AREA | LEGAL_SEX | LEGAL_AGE | ... | score_cnt_3_6 | score_cnt_6_12 | score_day_bf_m6 | score_year_bf | score_fail_cnt_per | score_fail_amt_per | score_ow_cnt_per_m3 | stable_score | grow_score | final_score | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 8.002900e+14 | 餐娱类 | 就餐场所和餐馆 | 621226****1423 | 1.022900e+11 | 91310115***E641 | 47DC90091B6BBE476E78E5D5AA1A9F3B | 510213 | 女 | 37 | ... | 66.490134 | 100 | 79.734951 | 91.149570 | 99.500649 | 99.437362 | 100.000000 | 83.772512 | 88.644849 | 95.650519 |
1 | 8.003910e+14 | 餐娱类 | 就餐场所和餐馆 | 621786****4862 | 1.043910e+11 | 35010260***3292 | 8E5E44B72135FE97C190E6EBF6BF9DDA | 350121 | 男 | 46 | ... | 70.229582 | 100 | 71.096137 | 72.676023 | 98.277708 | 97.254613 | 94.314502 | 81.791015 | 89.871021 | 95.545835 |
2 | 8.005520e+14 | 餐娱类 | 就餐场所和餐馆 | 622202****6985 | 1.025520e+11 | 91430211***0968 | 21EB44C8A0D2FC3ED5FF17457F2C8021 | 430202 | 男 | 32 | ... | 74.732512 | 100 | 68.917341 | 76.515809 | 95.516478 | 90.725373 | 100.000000 | 84.666181 | 93.099689 | 96.664641 |
3 | 8.004910e+14 | 一般类 | 光学产品、眼镜店 | 621081****7341 | 1.054910e+11 | 91410104***9496 | 1D29F6A6EEEE7147BBA0B500A41134FD | 410402 | 男 | 53 | ... | 71.365266 | 100 | 57.732148 | 76.375912 | 96.733301 | 93.707047 | 100.000000 | 84.586050 | 92.185113 | 96.573539 |
4 | 8.002900e+14 | 一般类 | 皮货店 | 622908****0571 | 3.092900e+11 | 91310116***5552 | E63E2E63D5399EF2BA7C28F4E3D720C7 | 332502 | 女 | 41 | ... | 64.289203 | 100 | 76.493775 | 85.980428 | 94.189257 | 93.225704 | 100.000000 | 84.829916 | 90.689888 | 96.134069 |
5 rows × 44 columns
需求:
- 对SUP_MCC_NM这一列 将餐娱类变成1 一般类变成2
level_map = {'餐娱类': 1, '一般类': 2}
df['ind_level'] = df['SUP_MCC_NM'].map(level_map)
df.head()
MERC_ID | SUP_MCC_NM | MCC_NM | STL_OAC | WC_LBNK_NO | BUS_LIC_NO | CRP_ID_NO | LEGAL_AREA | LEGAL_SEX | LEGAL_AGE | ... | score_cnt_6_12 | score_day_bf_m6 | score_year_bf | score_fail_cnt_per | score_fail_amt_per | score_ow_cnt_per_m3 | stable_score | grow_score | final_score | ind_level | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 8.002900e+14 | 餐娱类 | 就餐场所和餐馆 | 621226****1423 | 1.022900e+11 | 91310115***E641 | 47DC90091B6BBE476E78E5D5AA1A9F3B | 510213 | 女 | 37 | ... | 100 | 79.734951 | 91.149570 | 99.500649 | 99.437362 | 100.000000 | 83.772512 | 88.644849 | 95.650519 | 1 |
1 | 8.003910e+14 | 餐娱类 | 就餐场所和餐馆 | 621786****4862 | 1.043910e+11 | 35010260***3292 | 8E5E44B72135FE97C190E6EBF6BF9DDA | 350121 | 男 | 46 | ... | 100 | 71.096137 | 72.676023 | 98.277708 | 97.254613 | 94.314502 | 81.791015 | 89.871021 | 95.545835 | 1 |
2 | 8.005520e+14 | 餐娱类 | 就餐场所和餐馆 | 622202****6985 | 1.025520e+11 | 91430211***0968 | 21EB44C8A0D2FC3ED5FF17457F2C8021 | 430202 | 男 | 32 | ... | 100 | 68.917341 | 76.515809 | 95.516478 | 90.725373 | 100.000000 | 84.666181 | 93.099689 | 96.664641 | 1 |
3 | 8.004910e+14 | 一般类 | 光学产品、眼镜店 | 621081****7341 | 1.054910e+11 | 91410104***9496 | 1D29F6A6EEEE7147BBA0B500A41134FD | 410402 | 男 | 53 | ... | 100 | 57.732148 | 76.375912 | 96.733301 | 93.707047 | 100.000000 | 84.586050 | 92.185113 | 96.573539 | 2 |
4 | 8.002900e+14 | 一般类 | 皮货店 | 622908****0571 | 3.092900e+11 | 91310116***5552 | E63E2E63D5399EF2BA7C28F4E3D720C7 | 332502 | 女 | 41 | ... | 100 | 76.493775 | 85.980428 | 94.189257 | 93.225704 | 100.000000 | 84.829916 | 90.689888 | 96.134069 | 2 |
5 rows × 45 columns
apply
总结:
- 用的也特别多 速度比较快 特别是分组计算的时候
- 也可以在新产生一列 也可以用apply
- 但是如果Python有内置函数 就不要用apply了 内置函数更快
需求:
- 比如现在想要统计score_day_bf_m6和score_year_bf的最大值 并产生一个新列
方式1
df['max_num'] = df.apply(lambda x: max(x['score_day_bf_m6'], x['score_year_bf']), axis=1)
df.head()
MERC_ID | SUP_MCC_NM | MCC_NM | STL_OAC | WC_LBNK_NO | BUS_LIC_NO | CRP_ID_NO | LEGAL_AREA | LEGAL_SEX | LEGAL_AGE | ... | score_day_bf_m6 | score_year_bf | score_fail_cnt_per | score_fail_amt_per | score_ow_cnt_per_m3 | stable_score | grow_score | final_score | ind_level | max_num | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 8.002900e+14 | 餐娱类 | 就餐场所和餐馆 | 621226****1423 | 1.022900e+11 | 91310115***E641 | 47DC90091B6BBE476E78E5D5AA1A9F3B | 510213 | 女 | 37 | ... | 79.734951 | 91.149570 | 99.500649 | 99.437362 | 100.000000 | 83.772512 | 88.644849 | 95.650519 | 1 | 91.149570 |
1 | 8.003910e+14 | 餐娱类 | 就餐场所和餐馆 | 621786****4862 | 1.043910e+11 | 35010260***3292 | 8E5E44B72135FE97C190E6EBF6BF9DDA | 350121 | 男 | 46 | ... | 71.096137 | 72.676023 | 98.277708 | 97.254613 | 94.314502 | 81.791015 | 89.871021 | 95.545835 | 1 | 72.676023 |
2 | 8.005520e+14 | 餐娱类 | 就餐场所和餐馆 | 622202****6985 | 1.025520e+11 | 91430211***0968 | 21EB44C8A0D2FC3ED5FF17457F2C8021 | 430202 | 男 | 32 | ... | 68.917341 | 76.515809 | 95.516478 | 90.725373 | 100.000000 | 84.666181 | 93.099689 | 96.664641 | 1 | 76.515809 |
3 | 8.004910e+14 | 一般类 | 光学产品、眼镜店 | 621081****7341 | 1.054910e+11 | 91410104***9496 | 1D29F6A6EEEE7147BBA0B500A41134FD | 410402 | 男 | 53 | ... | 57.732148 | 76.375912 | 96.733301 | 93.707047 | 100.000000 | 84.586050 | 92.185113 | 96.573539 | 2 | 76.375912 |
4 | 8.002900e+14 | 一般类 | 皮货店 | 622908****0571 | 3.092900e+11 | 91310116***5552 | E63E2E63D5399EF2BA7C28F4E3D720C7 | 332502 | 女 | 41 | ... | 76.493775 | 85.980428 | 94.189257 | 93.225704 | 100.000000 | 84.829916 | 90.689888 | 96.134069 | 2 | 85.980428 |
5 rows × 46 columns
方式2
df['max_num'] = df[['score_day_bf_m6','score_year_bf']].max(axis=1)
df.head()
MERC_ID | SUP_MCC_NM | MCC_NM | STL_OAC | WC_LBNK_NO | BUS_LIC_NO | CRP_ID_NO | LEGAL_AREA | LEGAL_SEX | LEGAL_AGE | ... | score_day_bf_m6 | score_year_bf | score_fail_cnt_per | score_fail_amt_per | score_ow_cnt_per_m3 | stable_score | grow_score | final_score | ind_level | max_num | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 8.002900e+14 | 餐娱类 | 就餐场所和餐馆 | 621226****1423 | 1.022900e+11 | 91310115***E641 | 47DC90091B6BBE476E78E5D5AA1A9F3B | 510213 | 女 | 37 | ... | 79.734951 | 91.149570 | 99.500649 | 99.437362 | 100.000000 | 83.772512 | 88.644849 | 95.650519 | 1 | 91.149570 |
1 | 8.003910e+14 | 餐娱类 | 就餐场所和餐馆 | 621786****4862 | 1.043910e+11 | 35010260***3292 | 8E5E44B72135FE97C190E6EBF6BF9DDA | 350121 | 男 | 46 | ... | 71.096137 | 72.676023 | 98.277708 | 97.254613 | 94.314502 | 81.791015 | 89.871021 | 95.545835 | 1 | 72.676023 |
2 | 8.005520e+14 | 餐娱类 | 就餐场所和餐馆 | 622202****6985 | 1.025520e+11 | 91430211***0968 | 21EB44C8A0D2FC3ED5FF17457F2C8021 | 430202 | 男 | 32 | ... | 68.917341 | 76.515809 | 95.516478 | 90.725373 | 100.000000 | 84.666181 | 93.099689 | 96.664641 | 1 | 76.515809 |
3 | 8.004910e+14 | 一般类 | 光学产品、眼镜店 | 621081****7341 | 1.054910e+11 | 91410104***9496 | 1D29F6A6EEEE7147BBA0B500A41134FD | 410402 | 男 | 53 | ... | 57.732148 | 76.375912 | 96.733301 | 93.707047 | 100.000000 | 84.586050 | 92.185113 | 96.573539 | 2 | 76.375912 |
4 | 8.002900e+14 | 一般类 | 皮货店 | 622908****0571 | 3.092900e+11 | 91310116***5552 | E63E2E63D5399EF2BA7C28F4E3D720C7 | 332502 | 女 | 41 | ... | 76.493775 | 85.980428 | 94.189257 | 93.225704 | 100.000000 | 84.829916 | 90.689888 | 96.134069 | 2 | 85.980428 |
5 rows × 46 columns
总结:第二种方式更好
round(df['final_score'], 0)
0 96.0
1 96.0
2 97.0
3 97.0
4 96.0
Name: final_score, dtype: float64
value counts
检查频数
df['SUP_MCC_NM'].value_counts()
餐娱类 3
一般类 2
Name: SUP_MCC_NM, dtype: int64
检查频率
df['SUP_MCC_NM'].value_counts(normalize = True)
餐娱类 0.6
一般类 0.4
Name: SUP_MCC_NM, dtype: float64
在统计中包含缺失值
df['SUP_MCC_NM'].value_counts(dropna = False)
餐娱类 3
一般类 2
Name: SUP_MCC_NM, dtype: int64
统计信息按值排序而不是按计数排序
df['SUP_MCC_NM'].value_counts(sort = False)
一般类 2
餐娱类 3
Name: SUP_MCC_NM, dtype: int64
转为DataFrame
df['SUP_MCC_NM'].value_counts().reset_index()
index | SUP_MCC_NM | |
---|---|---|
0 | 餐娱类 | 3 |
1 | 一般类 | 2 |
缺失值统计
见具体的缺失值统计的博客
选择特定id的列-即取值符合某个条件的列
使用isin函数
分组:按照百分比
cut函数
to_csv
今天遇到的坑:
- 导出的名称里不能含有/ |
- 可以有[] - _
技巧:
- float_format=‘%.0f’
- 用于处理整数值和空缺值混合在一起的情况。如果一列同时包含缺失值和整数值,那么写入的数据类型仍然是 float 而不是 int 型。在导出数据表时,可以通过添加 float_format=‘%.0f’ 将所有浮点数四舍五入为整数。如果希望所有列输出的都是整数,那么这个技巧也可以帮你摆脱烦人的 ‘.0’ 格式。
降序排列
df_sort = df.sort_values(by = 'max_num', ascending=0) # 降序
df_sort['max_num']
0 91.149570
4 85.980428
2 76.515809
3 76.375912
1 72.676023
Name: max_num, dtype: float64