python dataframe一些处理示例

pandas的dataframe如何按指定list排序:

import pandas as pd
import numpy as np

#Series数据
s = pd.Series({'a':1, 'b':2, 'c':3})
print(s)
#list数据
list_custom = ['b', 'a', 'c']

#将series转换成dataframe
df = pd.DataFrame(s)
#重置df的索引,原来的索引变为一列
df = df.reset_index()
#设置列名
df.columns = ['word', 'number']
print(df)

#设置成"category"数据类型
df['word'] = df['word'].astype('category')
#inplace=True,使recorder_categories生效
df['word'].cat.reorder_categories(list_custom, inplace = True)
#inplace=True,使df生效
df.sort_values('word', inplace=True)
print(df)

out:

a    1
b    2
c    3
dtype: int64
  word  number
0    a       1
1    b       2
2    c       3
  word  number
1    b       2
0    a       1
2    c       3


将含有多值的列进行拆分:

import pandas as pd
import numpy as np

data = {'Country':['China','US','Japan','EU','UK/Australia', 'UK/Netherland'],
'Number':[100, 150, 120, 90, 30, 2],
'Value': [1, 2, 3, 4, 5, 6],
'label': list('abcdef')}

df = pd.DataFrame(data)
print(df)

out:
         Country  Number  Value label
0          China     100      1     a
1             US     150      2     b
2          Japan     120      3     c
3             EU      90      4     d
4   UK/Australia      30      5     e
5  UK/Netherland       2      6     f

将Country列中,index为4,5的数据进行拆分。

df = df.drop('Country', axis = 1).join(df['Country'].str.split('/', expand=True).stack().reset_index(level=1, drop=True).rename('Country'))
df.reset_index(drop=True, inplace=True)
print(df)

out:

   Number  Value label     Country
0     100      1     a       China
1     150      2     b          US
2     120      3     c       Japan
3      90      4     d          EU
4      30      5     e          UK
5      30      5     e   Australia
6       2      6     f          UK
7       2      6     f  Netherland

对其中代码进行拆解:

#对Country列数据进行拆分,expand表示拆分后转换成DataFrame
print(df['Country'].str.split('/', expand=True))

out:
       0           1
0  China        None
1     US        None
2  Japan        None
3     EU        None
4     UK   Australia
5     UK  Netherland
#stack用法不是很熟悉,网上的说法是将列索引转换成最内层的行索引。
#转换完成之后,发现Country数据到了一列中。
print(df['Country'].str.split('/', expand=True).stack())

out:
0  0         China
1  0            US
2  0         Japan
3  0            EU
4  0            UK
   1     Australia
5  0            UK
   1    Netherland
dtype: object
#使用stack转换换成后,通过reset_index重置索引,level的用法没太明白,drop=True是删除原索引。
print(df['Country'].str.split('/', expand=True).stack().reset_index(level=1, drop=True))

out:
0         China
1            US
2         Japan
3            EU
4            UK
4     Australia
5            UK
5    Netherland
dtype: object
#最后将原df中Country列删除,接上转换好的Country列
df = df.drop('Country', axis = 1).join(df['Country'].str.split('/', 
expand=True).stack().reset_index(level=1, drop=True).rename('Country'))
df.reset_index(drop=True, inplace=True)
print(df)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值