PANDAS&NUMPY操作TIPS

-1、https://www.numpy.org.cn/article/basics/an_introduction_to_scientific_python_numpy.html

-1.5、https://www.kaggle.com/thele0nx/learning-pandas-numpy-matplotlib-and-scipy

0、核查数据质量的函数/用法:

PANDAS&NUMPY操作TIPS_第1张图片
step1.读取,查重


PANDAS&NUMPY操作TIPS_第2张图片
step2.判断数据缺失情况applu

更巧妙地查找缺失值个数/列名的方法:判断 data_df [columnname].count() != len(data_df)     # 后者减去前者即该列缺失值的个数

缺失值过滤


PANDAS&NUMPY操作TIPS_第3张图片
step3.缺失值填充,注意sklearn中Imputer包的调用方法

补充,用dataframe自带的方法实现用众数填充缺失值:df.fillna(df.mode().iloc[0])——因为df.mode()返回的是一个dataframe,很多同最大频率的值都会返回。


step4.衡量数据的倾斜程度


PANDAS&NUMPY操作TIPS_第4张图片
step5.异常值检查


1、df.iloc[:,-2]  ----取表的倒数第二列              df.iloc[0] ----取表的第一行

2、获取列名:list(my_dataframe.columns.values)    或者  list(my_dataframe)   或者 [column for column in df]    ----得到column名字的list

3、索引问题:

    for provin provinces:

            reg ='\A' + prov

            df_county_in_province = df_2861_county.filter(regex=reg, axis=0)

            gov_codes = df_county_in_province.index

            # 遍历一个省下的所有县

            for gov_code in gov_codes:

                    if gov_code in df_2861_county.index.values:

                            ……

4、切片问题:  ——好久不用又忘记了!!!2018/6/14

for node_name in env_corners:

        # 获得一个node类型

        node_type = df_node[df_node['name'] == node_name]['is_bottom'].values[0]   //不是 .values()[0]!!! —— 会报错:'numpy.ndarray' object is not callable

        print(df_node[df_node['name']==node_name]['is_bottom'])

        print(df_node[df_node['name'] == node_name]['is_bottom'].values)

        print(node_type)


输出:

【df_node[df_node['name']==node_name]['is_bottom']】:


4 1

Name: is_bottom, dtype: object


【df_node[df_node['name'] == node_name]['is_bottom'].values】:


['1']


【df_node[df_node['name'] == node_name]['is_bottom'].values[0]】:


1


5、清洗NAN:

df_new = df_new.where(df_new.notnull(), '本区县暂无数据')

补充:

5/1

DataFrame.where(condother=naninplace=Falseaxis=Nonelevel=Noneerrors='raise'try_cast=Falseraise_on_error=None)

cond : boolean NDFrame, array-like, or callable

Where cond is True, keep the original value. Where False, replace with corresponding value from other.

5/2

判断np.nan和None的方法:

① df.isnull()   ------True为np.nan或None, False为其他值

②df.notnull()   ----与①结果相反,True为其他值, False为np.nan或None

③df != df     ——True为np.nan或None, False为其他值

5/3

在dataframe里查找nan的位置:

# 获取索引名

df.index [ np.where(np.isnan(df['gov']))[0] ].tolist()  —— 又忘了。。。2019/3/2

[0]----对应取行号

df[ df['gov'] != df['gov'] ].index

③ df.index[ df['gov'] != df['gov'] ]   —— 又忘了。。。2018/7/13

# 获取列名

df.columns [ np.where(np.isnan(df))[1] ].tolist()

[1]-----对应取列号

PANDAS&NUMPY操作TIPS_第5张图片
查找nan的示例

6、排名

df_new['ENV_rank'].rank(method='first', ascending=False)


PANDAS&NUMPY操作TIPS_第6张图片


7、加列:

一、加一列:


PANDAS&NUMPY操作TIPS_第7张图片
加两列,df[['D','E']] =None ,结果报错

二、加两列以上:

(1)第一个方法是利用pd.concat 在DataFrame后面添加两列,这种方法的缺点是不能指定位置

pd.concat([df, pd.DataFrame(columns=list('DE'))])

PANDAS&NUMPY操作TIPS_第8张图片

(2)第二种方法是利用 reindex来重排和增加列名df.reindex(columns=list('ABCDE'))

PANDAS&NUMPY操作TIPS_第9张图片

这种方法,你可以改变各列的相对位置,且保留原始列的数值,比如df.reindex(columns=list('BCADE'))

PANDAS&NUMPY操作TIPS_第10张图片

reindex 还有 fill_value 选项,可以填充NaN,例子如下df.reindex(columns=list('ABCDE'), fill_value=0)

三、list.insert

list.insert的方法list.insert(index, obj)

参数

index -- 对象obj需要插入的索引位置。

obj -- 要插入列表中的对象。

先获取原列名集合, 赋值给新变量(这个很重要,具体原因我也不知道为啥), 然后 insert

col_name = df.columns.tolist()

col_name.insert(1,'D')

df.reindex(columns=col_name)

Out[92]:

A D B C01 NaNNoneNone13 NaNNoneNone

或者不用数字索引,直接在某列前面或后面插入,利用 list.index的方法

col_name = df.columns.tolist()

col_name.insert(col_name.index('B'),'D')# 在 B 列前面插入df.reindex(columns=col_name)

Out[93]:

A D B C01 NaNNoneNone13 NaNNoneNone

col_name = df.columns.tolist()

col_name.insert(col_name.index('B')+1,'D')# 在 B 列后面插入df.reindex(columns=col_name)

Out[96]:

A B D C

01None NaNNone

13None NaNNone


8、axis=0 VS axis=1:

其实问题理解axis有问题,df.mean其实是在每一行上取所有列的均值,而不是保留每一列的均值。也许简单的来记就是axis=0代表往跨行(down),而axis=1代表跨列(across),作为方法动作的副词(译者注)

换句话说:

使用0值表示沿着每一列或行标签\索引值向下执行方法

使用1值表示沿着每一行或者列标签模向执行对应的方法

下图代表在DataFrame当中axis为0和1时分别代表的含义:


PANDAS&NUMPY操作TIPS_第11张图片

axis参数作用方向图示

另外,记住,Pandas保持了Numpy对关键字axis的用法,用法在Numpy库的词汇表当中有过解释:

轴用来为超过一维的数组定义的属性,二维数据拥有两个轴:第0轴沿着行的垂直往下,第1轴沿着列的方向水平延伸。

所以问题当中第一个列子 df.mean(axis=1)代表沿着列水平方向计算均值,而第二个列子df.drop(name, axis=1) 代表将name对应的列标签(们)沿着水平的方向依次删掉。

9、dataframe改列名:

a.rename(columns={'A':'a', 'C':'c'}, inplace = True)

10、dataframe——groupby,注意apply操作的用法~~

group_by_province = df_dataset.groupby([df_dataset['gov_code'].apply(lambda x: int(int(x) / 10000)),

                                df_dataset['full_name'].apply(lambda x: x.split('|')[0])])

    mean = group_by_province.mean()['total_score'].reset_index()

    max = group_by_province.max()['total_score'].reset_index()

    min = group_by_province.min()['total_score'].reset_index()

    count = group_by_province.size().reset_index()

11、

df=DataFrame([{‘A’:’11’,’B’:’12’},{‘A’:’111’,’B’:’121’},{‘A’:’1111’,’B’:’1211’}])

print df.columns.size#列数 2

print df.iloc[:,0].size#行数 3

print df.ix[[0]].index.values[0]#索引值 0

print df.ix[[0]].values[0][0]#第一行第一列的值 11

print df.ix[[1]].values[0][1]#第二行第二列的值 121

12、

1) df.loc['c']——通过行标签索引行数据

2)  df.iloc[0]——通过行号获取行数据

3)  df[0:2]  #取前两行数据

# map, apply, lambda太好用了!!!!少写了好多循环啊@!!!!!

13、对dataframe一整列进行某函数操作: —— 太神奇了!!!!!!【只要没有任务的压力,Python还是很好玩儿的……】

df_temp['content_pre'] = df_temp['content'].apply(lambda x:TextDispose(x).text_preparation(weibo_min_len, weibo_max_len))

df_temp['content_pree'] =list(map(lambda x:TextDispose(x).text_preparation(weibo_min_len, weibo_max_len), df_temp['content']))

注意:lambda函数,前面是形参,后面是返回值

print(df_temp)

print(df_temp['content_pre'] == df_temp['content_pree'])   //都是用的同一个函数处理,看结果是否一致

输出结果:


PANDAS&NUMPY操作TIPS_第12张图片
第八个不一样是因为是None的特殊性~~so we made it~~~Bingo!!!

14、# 清洗None / np.nan

df_temp.drop(df_temp.index[df_temp['content_pre'] != df_temp['content_pre']], inplace=True)    //去掉所在行  —— 2018/8/1 又忘了。。。

df_temp[ratio_col].replace([np.nan, '', None], 0, inplace=True)   //直接替换成0

# inplace=True使改变发生在原表上!!!\

15、总结一下merge(多基于index),concat(可以ignore index), join等等   —— 都是基于index的,不好弄。。。直接赋值添加列吧

16、遍历取dataframe的简便方法:

for index, row in df_temp.iterrows():     // 注意:只写 for row in df_temp.iterrows()的话,取row['col']会报错!!!

        print(row['col'])

        print(index)

PS:这里的iterrows()返回值为元组,(index,row) 

上面的代码里,for循环定义了两个变量,index,row,那么返回的元组,index=index,row=row. 

17、dataframe按某一列的值排序:df.sort_values(by=['col1'])

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sort_values.html

18、 建议表达:dfmi.loc[:,'one'] ——取列操作

dfmi['one']会报warning;注:dfmi.iloc[a,b]——a,b只能为整数(第a+1行,第b+1列)

19、pd.read_sql()

20、dataframe删除行:

df_temp.drop(df_temp.index[df_temp['content_pre'] != df_temp['content_pre']], inplace=True)

21、dataframe.update —— 可以满足多个分块dataframe对同一个dataframe更新填值的操作 —— 20190626

与dataframe.fillna区分开,fillna也可以传dataframe

PANDAS&NUMPY操作TIPS_第13张图片
更新操作——需保证两个dataframe的index和column一样

22、研究一下

23、dataframe drop_duplicates,groupby, pivot_table

24、dataframe有一个坑:如果直接pd.read_json,会做一些意想不到的转换,比如,把日期字符串转换为timestamp格式存入pandas中。但如果先将load成字典,再用pd.DataFrame.from_dict,则可保持原有的日期字符串格式。另外,无论是read_json还是from_dict转换,都不能保证字典的顺序也能以相应行序存入dataframe中(顺序可能完全打乱),所以转为pandas后用sort_values先排个序,再处理。

25、df.append(df0, ignore_index=True)

26、Series取值:索引列为数字时,Series[n],n只能为索引值;如果索引列为字符串(如:"a","b","c"等),Series[n],取的是对应第n+1行的数据

27、dataframe - dtype

示例df


整型可以用这个判断


字符串不行
字符串可以这样判断

原因? 

PANDAS&NUMPY操作TIPS_第14张图片
各列type不一样,dataframe没有str类型,只有object混合类型。所以判断不了

因为字符串长度是不固定的,pandas没有用字节字符串的形式而是用了object ndarray

PANDAS&NUMPY操作TIPS_第15张图片
like this

28、取每个县的最后一个名字:(ps,gov_name样例:‘四川省|成都市|高新区’)df_class_city["gov_name"].str.split('|', n=-1, expand=True).iloc[:,-1]

另一种dataframe不同列之间的拼接(相加)方法:

- 类型相同(都为字符串):df1['i'].str.split('|',n=-1, expand=True).iloc[:,-1] + '['+df1['a']+']'

- 类型不同(字符串和整型的拼接):

df1['i'].str.split('|',n=-1, expand=True).iloc[:,-1] + '['+df1['b'].map(str)+']'

PANDAS&NUMPY操作TIPS_第16张图片
官网参数释义


29、dataframe.str. :https://www.cnblogs.com/P--K/p/8443995.html

30、index / reindex / reset_index  ——  研究下

31、dataframe.filter

PANDAS&NUMPY操作TIPS_第17张图片
官方用法

32、某一列取整/四舍五入/转换类型:

df['event'].map(str)       /         df['event'].apply(int)                   /        df['event'].apply(numpy.round)

33、dataframe groupby agg【分组后各列的操作不一样】:

PANDAS&NUMPY操作TIPS_第18张图片
df_event 按 c 列聚合分类,求列a分组后各组的最大值,列b分组后各组的总和

34、修改列名:

PANDAS&NUMPY操作TIPS_第19张图片
如果要在原表上修改,记得加inplace=True

35、dataframe.update —— 可实现更新总表中部分值的作用:

PANDAS&NUMPY操作TIPS_第20张图片
多余的列不会被更新进来。

36、lambda 函数的axis参数:

PANDAS&NUMPY操作TIPS_第21张图片
axis=1,表示取row[key],否则是从index里找key

37、join 

PANDAS&NUMPY操作TIPS_第22张图片
记得如果要on多组key,那么右边的dataframe一定也是以这多组key为多索引的情况!!!

常用:

PANDAS&NUMPY操作TIPS_第23张图片
on单列


on多列


38、根据某列的值在一个已有列表中的行,取另一列的值

missing_govs = df_2861_gaode_geo.loc[df_2861_gaode_geo["gov_id"].isin(missing_govids)]["full_name"].values.tolist()

39、列名按指定顺序,输出dataframe

方法一:

如果列少,这是最直观,也最简洁的方法

order = ['date', 'time', 'open', 'high', 'low', 'close', 'volumefrom', 'volumeto']   df = df[order]                # 肥肠巧妙!!!

方法二:

查询自下面的链接。

https://blog.csdn.net/u012560212/article/details/54928255

先把需要调整的列的数据拿出来,之后,再将这个列删掉,最后,再用插入的方式把这个列调整到对应的位置上。下面这段代码把数据调到了第一列。

df_id = df.id

df = df.drop('id',axis=1)

df.insert(0,'id',df_id)

注意:

insert( n, 'col_name', col) 中 n 必须是 >= 0的整数。

如果列很多,倒数比较方便,可以用 df.shape[1] 先算出这个 df一共有多少列,

再 df.shape[1]-1 就是倒数第二列啦~


另,如果我只是想把新增的一列插入到df中,放在最后一列位置就可以,此时 concat函数即可。

dis_series 是新的一列,series的类型。

output = pd.concat([rawdt,dis_series],axis=1)

40、dataframe append 容易改变原df列名顺序的问题:

PANDAS&NUMPY操作TIPS_第24张图片
蓝色这样的写法不能保证列名顺序


PANDAS&NUMPY操作TIPS_第25张图片
最好这样写
PANDAS&NUMPY操作TIPS_第26张图片
记得ignor_index,否则插入df又从0开始建索引

41、dataframe基本操作函数整理:https://blog.csdn.net/hhtnan/article/details/80080240

42、dataframe查看每列空值个数:_dataframe.sum()是个功能!!能统计出每列的总值,输出以列名为index的Series

PANDAS&NUMPY操作TIPS_第27张图片
原来.isnull().sum()就可以了!!坑爹,我还各种筛选!!!!

43、整个dataframe数据转换:

1)astype

PANDAS&NUMPY操作TIPS_第28张图片
x0 = x0.astype(int)/ x0.astype(float)……  

2)软转换——infer_objects() 类型自动推断

PANDAS&NUMPY操作TIPS_第29张图片
df = df.infer_objects()

3) pd.to_numeric() _转换为数值

PANDAS&NUMPY操作TIPS_第30张图片
对Series
PANDAS&NUMPY操作TIPS_第31张图片
对DataFrame,用apply, errors='ignore'是为了避免字符串转换不了报错的问题

4) 另外pd.to_datetimepd.to_timedelta可将数据转换为日期和时间戳。

44、numpy.array数组去掉nan:

PANDAS&NUMPY操作TIPS_第32张图片
data [ data == data ]

45、numpy里的空值填充:

PANDAS&NUMPY操作TIPS_第33张图片
a[np.isnan(a)] = 0

记住,numpy永远是以坐标的方式在操作,不像pandas是以表为对象用功能函数~~

注意:list不能像numpy这样坐标定位的方式:

numpy:

numpy.array的坐标里可以写任意公式来定位并编辑数值

list:

list只会把方框里的当做逻辑判断,判断ly是个list,不等于0,故方框里的表达式值为0,所以永远只能改到第一个值,即lx[0]

46、如何使整个dataframe四舍五入取整? 先加0.5, 再astype(int),很巧妙啊!!!

PANDAS&NUMPY操作TIPS_第34张图片
也可以rate = rate + 0.5;然后 rate = rate.astype(int)

47、问题:读取csv文件指定index_col/处理dataframe的过程中, 可能产生原有index独立出来为列,列名为:Unnamed:0,很烦。如下图:

PANDAS&NUMPY操作TIPS_第35张图片

Unnamed

解决方法:很巧妙~~~df = df.loc[:, ~df.columns.str.contains('^Unnamed')]                    # 取列名不包含Unnamed开头的列

48、pandas 多sheet的excel修改

PANDAS&NUMPY操作TIPS_第36张图片
为了避免修改后覆盖源文件,应该加上engine=“openyxl”

不加时,会擦除之前的,仅储存本次写入的sheet

PANDAS&NUMPY操作TIPS_第37张图片
官方
to_excel的encoding参数,解释了为什么每次我用writer写设置utf-8都没用的问题。。

问题:我只想修改已存在的excel里某个sheet怎么办?当前用openyxl可以做到,但sheet_name相同时不会覆盖,只会重新生成一个原名+1的sheet。。。 ???   之后研究一下20190223

49、numpy.log 可以对整个dataframe操作!!!太方便了!!!

PANDAS&NUMPY操作TIPS_第38张图片
np.log10(df+1)

50、pandas 某一列求n次幂 —— **n

PANDAS&NUMPY操作TIPS_第39张图片
**n

51、dataframe.filter

PANDAS&NUMPY操作TIPS_第40张图片
不用再用 [col for col in list(df) if xx in col ] 这种方式筛取列名啦

52、reset_index 和 multiIndex —— 多层级index的处理

http://blog.sina.com.cn/s/blog_12c3192a50102xdzq.html

PANDAS&NUMPY操作TIPS_第41张图片
把单索引和单列名,改为多重索引和多重列名;注:用了df.index = df.date后,原“date”列依然保留,故需要del掉
PANDAS&NUMPY操作TIPS_第42张图片
原表
PANDAS&NUMPY操作TIPS_第43张图片
df.reset_index(drop=True)的话原来的index将会被新的index取代,现在通过multipindex修改一下目录,index增加一个cat子目录,columns也增加多一层,如果需要对index的level1进行提取就写成:df.index.levels[1],   修改后如上
PANDAS&NUMPY操作TIPS_第44张图片
现在index和columns各有两层,然后通过reset_index修改一下,把cat改为columns然后定义在level1,由于level0空白重命名为'letter',修改后如上

由于groupby这个函数不能对index进行组合,所以可以通过reset_index()把index变成columns后在进行groupby的计算,例如df.reset_index().groupby(['state','status']).sum()

如果写成df=df.reset_index().groupby(['state','date']).sum() 可以通过df.loc['FL']['2009':'2010']按年份提取

53、多层级索引降级:https://blog.csdn.net/flyfoxs/article/details/81346885

54、定义多索引dataframe

index = pd.MultiIndex.from_arrays([['GA', 'TX'], ['2019-03-01' , '2019-03-03']], names=['state', 'date'])

df_added = pd.DataFrame(data=[[2,3],[4,5]],index=index, columns=['x','y'])

定义一个多重索引的dataframe

55、按层级获取多重索引的索引值:df.index.get_level_values(level_num).values

PANDAS&NUMPY操作TIPS_第45张图片
多索引dataframe如上图
法1:df.index.get_level_values(level_num).values  
法2:一个一个索引tuple来遍历取值

56、多重索引不同方法取值效果

原表:

PANDAS&NUMPY操作TIPS_第46张图片
一个多重索引的dataframe示例

df.index:

取出全部索引

df.index[0]:并不是取出一个维度的index,而是取出多重index的第一行的tuple

0是level0的第一个index,10000是level1的第一个index

df.index.get_level_values(0):取出level0的全部index

取出了维度为‘idx1’的全部索引值

57、pd.DataFrame(data_dict)  .VS.  pd.DataFrame.from_dict(data_dict, orient="index")

eg: 

data_dict1 = {'gov_id': '581', 'ss_id': '200', 'score': 100, 'desc': {'value': '0.0'}}

data_dict2 = {'gov_id': '581', 'ss_id': '200', 'score': 100, 'desc': {'value': '0.0', 'rank':'1'}}

1) pd.DataFrame(data_dict)

PANDAS&NUMPY操作TIPS_第47张图片
pd.DataFrame(data_dict),会拆解字典型数据

2) pd.DataFrame.from_dict(data_dict, orient="columns")

pd.DataFrame(data_dict)  等效于  pd.DataFrame.from_dict(data_dict, orient="columns")

pd.DataFrame.from_dict(data_dict, orient="columns"),也会自动把字典型数据拆成两行

3) pd.DataFrame.from_dict(data_dict, orient="index")

PANDAS&NUMPY操作TIPS_第48张图片
pd.DataFrame.from_dict(data_dict, orient="index"),不会拆解字典型数据,会作为整个数据存在一个cell里

58、pandas.DataFrame.to_dict

PANDAS&NUMPY操作TIPS_第49张图片
records
PANDAS&NUMPY操作TIPS_第50张图片
按行的dict的list

59、【dataframe数据透视表】pandas.pivot_table:

https://www.cnblogs.com/onemorepoint/p/8425300.html

60、一行内容拆分成多行:https://blog.csdn.net/erinapple/article/details/80737449

61、矩阵/数组,存成txt:

np.savetxt(txt_path, df_label_num.values, fmt="%d:%s", delimiter="\r\n")

62、pandas groupby 后统计每类个数 - .count() / .size()

PANDAS&NUMPY操作TIPS_第51张图片
.count() / .size()


63、# 对sentence字段,按逗号,句号和分号等各种符号拆分

df_unmatch_ad = df_unmatch_data.drop("sentence", axis=1).join(df_unmatch_data["sentence"].str.split(para.PUNCTUATION_R, expand=True).stack().reset_index(level=1, drop=True).rename("sentence"))

.stack() —— 把列堆叠转到行索引

.reset_index(level=1, drop=True) —— 删除第一层的索引,且不将索引插回到列中

level : int,str,tuple或list,默认为None

仅从索引中删除给定的级别。默认情况下删除所有级别。

drop : bool,默认为False

不要尝试将索引插入到dataframe列中。这会将索引重置为默认整数索引。

64、np.einsum:https://zhuanlan.zhihu.com/p/27739282

65、pd.to_csv('your.csv', index=False)

PANDAS&NUMPY操作TIPS_第52张图片
index=False,可避免索引列输出至csv

66、pandas 数据类型 - dtypes

https://juejin.im/post/5acc36e66fb9a028d043c2a5

PANDAS&NUMPY操作TIPS_第53张图片
pandas-dtypes

67、切片取series:

data.iloc[-1] #选取DataFrame最后一行,返回的是Series

切片取dataframe:

data.iloc[-1:] #选取DataFrame最后一行,返回的是DataFrame

68、用字典形式 一行一行写dataframe:

1)append

PANDAS&NUMPY操作TIPS_第54张图片
append字典时,必须加ignore_index,否则报错;支持append新增字段

2).loc

PANDAS&NUMPY操作TIPS_第55张图片
.loc[index]=dict
PANDAS&NUMPY操作TIPS_第56张图片
.loc不支持新增字段/不匹配字段


69、转变索引的数据类型

#changetypetounicodeifnotisinstance(df.index,unicode): 

 df.index= df.index.astype(unicode)

70、multiindex - 多重索引检索

df_average = df_average.set_index(["region_type","gov_id", "gov_code", "gov_name"], drop=True)

df_average.loc[(slice(None), slice(None),slice(None),"河北省|石家庄市"),:]  —— 唯一标准的表达,必须写全所有索引列(无筛选的列用slice(None)),用圆括号

71、reindex - 重置索引,没有的补0

https://blog.csdn.net/zhili8866/article/details/68134481

PANDAS&NUMPY操作TIPS_第57张图片
也可以重置列

71.5、注意:reindex的坑:a = a.reindex(b.index, fill_value=0),会洗掉原本a有的,但b没有的索引;

所以如果需求只是:把b中有的索引,给a补全;a中本来的索引及数据都保留,则应该这么做:a = a.reindex(a.index | b.index, fill_value=0)

取两个dataframe的索引并集。

72、集合交/并/差集

>>> x = set('spam')  

>>> y = set(['h','a','m'])  

>>> x, y  

(set(['a','p','s','m']), set(['a','h','m']))  


再来些小应用。  


>>> x & y# 交集  

set(['a','m'])  


>>> x | y# 并集  

set(['a','p','s','h','m'])  


>>> x - y# 差集  

set(['p','s'])  

73、调整列的顺序:

df = df.reindex([新顺序列名], axis='columns') / df.reindex([新顺序列名], axis=1) 

删除指定列:

df = df.drop([需要删除的列名], axis=1)

PANDAS&NUMPY操作TIPS_第58张图片
删除列,改变列顺序的示例

你可能感兴趣的:(PANDAS&NUMPY操作TIPS)