Pandas 简单例子

Pandas

import pandas as pd
import numpy as np
print(pd.__version__)

1.1.3

1. 创建一个如下所示的DataFrame

`AppleBanana
2017 Sale3521
2018 Sale4134

2. 从list,dict,numpy array 创建Series

#输入
import numpy as np
a_list = list("abcdefg")
numpy_array = np.arange(1, 10)
dictionary = {"A":  0, "B":1, "C":2, "D":3, "E":5}
series1 = pd.Series(a_list)
print(series1)
series2 = pd.Series(numpy_array)
print(series2)
series3 = pd.Series(dictionary)
print(series3)
0    a
1    b
2    c
3    d
4    e
5    f
6    g
dtype: object
0    1
1    2
2    3
3    4
4    5
5    6
6    7
7    8
8    9
dtype: int32
A    0
B    1
C    2
D    3
E    5
dtype: int64

3. 将系列Series转换为一个DataFrame,并将其索引作为该DataFrame上的另一列

#输入
mylist = list('abcedfghijklmnopqrstuvwxyz')
myarr = np.arange(26)
mydict = dict(zip(mylist, myarr))
ser = pd.Series(mydict)
print(ser)
a     0
b     1
c     2
e     3
d     4
f     5
g     6
h     7
i     8
j     9
k    10
l    11
m    12
n    13
o    14
p    15
q    16
r    17
s    18
t    19
u    20
v    21
w    22
x    23
y    24
z    25
dtype: int64
# solution 1 using DataFrame
ser_df = pd.DataFrame(ser)
ser_df.reset_index()

# using pandas to_frame()
ser_df = ser.to_frame().reset_index()
ser_df
index0
0a0
1b1
2c2
3e3
4d4
5f5
6g6
7h7
8i8
9j9
10k10
11l11
12m12
13n13
14o14
15p15
16q16
17r17
18s18
19t19
20u20
21v21
22w22
23x23
24y24
25z25

4. 合并ser1和ser2形成一个DataFrame

#输入
ser1 = pd.Series(list('abcedfghijklmnopqrstuvwxyz'))
ser2 = pd.Series(np.arange(26))
# using pandas DataFrame
ser_df = pd.DataFrame(ser1, ser2).reset_index()
ser_df.head()
# using pandas DataFrame with a dictionary, gives a specific name to the column
ser_df = pd.DataFrame({"col1":ser1, "col2":ser2})
ser_df.head()
# using pandas concat
ser_df = pd.concat([ser1, ser2], axis = 1)
ser_df
01
0a0
1b1
2c2
3e3
4d4
5f5
6g6
7h7
8i8
9j9
10k10
11l11
12m12
13n13
14o14
15p15
16q16
17r17
18s18
19t19
20u20
21v21
22w22
23x23
24y24
25z25

5. 计算ser的最小值、第25%位数、中位数、第75%位数和最大值

#输入
state = np.random.RandomState(100)
ser = pd.Series(state.normal(10, 5, 25))
print(ser)
0      1.251173
1     11.713402
2     15.765179
3      8.737820
4     14.906604
5     12.571094
6     11.105898
7      4.649783
8      9.052521
9     11.275007
10     7.709865
11    12.175817
12     7.082025
13    14.084235
14    13.363604
15     9.477944
16     7.343598
17    15.148663
18     7.809322
19     4.408409
20    18.094908
21    17.708026
22     8.740604
23     5.787821
24    10.922593
dtype: float64
# using pandas
ser.describe()

# or using numpy
np.percentile(ser, q = [0, 25, 50, 75, 100])
array([ 1.25117263,  7.70986507, 10.92259345, 13.36360403, 18.0949083 ])

6. 计算两个序列的欧氏距离

#输入
p = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
q = pd.Series([10, 9, 8, 7, 6, 5, 4, 3, 2, 1])
'''
应该输出

18.165
'''
'\n应该输出\n\n18.165\n'
# using list comprehension
suma = np.sqrt(np.sum([(p - q)**2 for p, q in zip(p, q)]))
suma

# using series one to one operation
sum((p - q)**2)**.5

# using numpy
np.linalg.norm(p-q)
18.16590212458495

7. 从df1中删除df2中存在的行。所有三列必须相同。

# 输入
df1 = pd.DataFrame({'fruit': ['apple', 'banana', 'orange'] * 3,
                    'weight': ['high', 'medium', 'low'] * 3,
                    'price': np.random.randint(0, 10, 9)})

df2 = pd.DataFrame({'pazham': ['apple', 'orange', 'pine'] * 2,
                    'kilo': ['high', 'low'] * 3,
                    'price': np.random.randint(0, 10, 6)})

df1
# df2
fruitweightprice
0applehigh9
1bananamedium8
2orangelow6
3applehigh3
4bananamedium6
5orangelow9
6applehigh1
7bananamedium9
8orangelow2
df2 = df2.rename(columns = {'pazham':'fruit','kilo':'weight','price':'price'}) # 为每个 index 单独修改名称
df1 = df1.append(df2)
df1 = df1.append(df2)
print("补集(从df1中过滤df1在df2中存在的行):\n%s\n\n" % df1.drop_duplicates(subset=['fruit', 'weight', 'price'],keep=False))
# sf2
参考:
https://blog.csdn.net/missyougoon/article/details/83780845
https://blog.csdn.net/qq_41551450/article/details/104946765
https://blog.csdn.net/qq_28388339/article/details/109075837
  File "<ipython-input-16-3af8dc2e967c>", line 6
    参考:
       ^
SyntaxError: invalid syntax

8. 绘制df1每一列的直方图。

# 输入
df1 = pd.DataFrame(np.random.randn(100,3), columns=["col1", "col2", "col3"])

df1

col1col2col3
01.581114-2.3284621.763890
10.0333150.6392580.458925
20.955110-0.071683-0.803130
30.443900-1.094748-0.710245
40.4240980.349480-2.828947
............
950.8334530.614418-1.088890
96-0.510392-0.7531900.169979
971.668512-0.441556-1.673732
980.7302750.3095220.668297
990.0510710.0889640.206193

100 rows × 3 columns

df1.plot.bar()

在这里插入图片描述

9. 将序列ser中低于5%和大于95%的所有值替换为各自的第5%和95%值。

#输入
# input
ser = pd.Series(np.logspace(-2, 2, 30))
ser

ser = ser.to_frame()

# ser.ix[ser['0']<=np.percentile(ser,5),'0']=np.percentile(ser,5)
# ser.ix[ser[0]>=np.percentile(ser,95),0]=np.percentile(ser,95)

# df.sex[df['sex']=='m']=1
# ser.'0'[ser[0]<=np.percentile(ser,5)]=np.percentile(ser,5)

# df.loc[(df['First Season'] > 1990)] = 1
ser.loc[(ser[0]<=np.percentile(ser,5))] = np.percentile(ser,5)
ser.loc[(ser[0]>=np.percentile(ser,95))] = np.percentile(ser,95)

ser
# 参考:
# http://www.cocoachina.com/cms/wap.php?action=article&id=53695
# https://blog.csdn.net/brucewong0516/article/details/80205422
# https://blog.csdn.net/weixin_41100555/article/details/88555658
# https://blog.csdn.net/weixin_37536446/article/details/81266273
0
00.016049
10.016049
20.018874
30.025929
40.035622
50.048939
60.067234
70.092367
80.126896
90.174333
100.239503
110.329034
120.452035
130.621017
140.853168
151.172102
161.610262
172.212216
183.039195
194.175319
205.736153
217.880463
2210.826367
2314.873521
2420.433597
2528.072162
2638.566204
2752.983169
2863.876672
2963.876672

10. 从文件list.xlsx读取数据,统计每个学校的人数。

# -*- coding:utf-8 -*-
import pandas as pd

# 从文件list.xlsx读取数据,统计每个学校的人数

df = pd.read_excel('list.xlsx')  # 这个会直接默认读取到这个Excel的第一个表单
# data=df.head()#默认读取前5行的数据 在()里可以加数字表示多少行

# data=df.iloc[0:].values#0表示第一行 这里读取数据并不包含表头,要注意哦!
# print("读取指定行的数据:\n{0}".format(data))

data = df.iloc[:, 4].values
# print("读取指定列的数据:\n{0}".format(data))

setAll = set()
for i in data:
    setAll.add(i)

dict = {}

for i in setAll:
    dict[i] = 0

for i in data:
    dict[i] += 1

for i in dict.items():
    print(i)

# ix报错参考:https://blog.csdn.net/Jinnnnnny/article/details/106670768

(‘北京师范大学珠海分校’, 80)
('北京理工大学珠海学院 ', 1)
(‘广东邮电职业技术学院’, 1)
(‘闽南师范大学’, 1)
(‘广州南洋理工职业学院’, 1)
(‘暨南大学’, 5)
(‘深圳信息职业技术学院’, 1)
(‘广东东软学院’, 20)
(‘广东科技学院’, 15)
(‘顺德职业技术学院’, 1)
(‘广东白云学院’, 3)
(‘广东财经大学’, 5)
(‘珠海市第八中学’, 1)
(‘南洋理工职业学院’, 1)
(‘广州工商学院’, 1)
(‘哈尔滨工业大学(深圳)’, 11)
(‘广东海洋大学’, 1)
(‘澳門培正中學’, 4)
(‘广州市第六中学’, 1)
(‘仲恺农业工程学院’, 3)
(‘深圳市第三职业技术学校’, 3)
(‘江门职业技术学院’, 3)
(‘鲁东大学’, 24)
(‘中山大学新华学院’, 21)
(‘广州城建职业学院’, 2)
(‘广州大学’, 4)
(‘广东省创新科技职业技术学院’, 1)
(‘南方科技大学’, 18)
(‘五邑大学’, 5)
(‘韶关学院’, 24)
(‘阳江职业技术学院’, 4)
(‘华南理工大学’, 55)
(‘广东工业大学’, 42)
(‘北京理工大学珠海学院’, 28)
(‘中山大学’, 5)
(‘深圳大学’, 2)
(‘澳门大学’, 2)
(‘广州番禺职业技术学院’, 8)
(‘广州科技职业技术大学’, 4)
(‘岭南师范学院’, 5)
(‘广东创新科技职业学院’, 7)
(‘广东培正学院’, 22)
(‘华南理工大学广州学院’, 17)
(‘广州大学华软软件学院’, 14)
(‘华南农业大学’, 11)
(‘东莞理工学院’, 19)
(‘广州大学松田学院’, 3)
(‘广东第二师范学院’, 5)
(‘广东生态工程职业学院’, 1)
(‘佛山科学技术学院’, 2)
(‘深圳职业技术学院’, 3)
(‘澳门城市大学’, 3)
(‘肇庆学院’, 23)
(‘长安大学’, 1)
(‘无单位’, 1)
(‘吉林大学珠海学院’, 22)
(‘广州铁一中学’, 2)
(‘嘉应学院’, 39)
(‘广东金融学院’, 8)
(‘广东工业大学华立学院’, 2)
(‘广东科贸职业学院’, 2)
(‘汕头大学’, 1)
(‘澳门科技大学’, 6)
(‘浙江传媒学院’, 1)
(‘广东工贸职业技术学院’, 3)
(‘广东科学技术职业学院’, 29)
(‘广州商学院’, 11)
(‘广东石油化工学院’, 2)
(‘中山大学南方学院’, 3)
(‘广东岭南职业技术学院’, 4)
(‘广东农工商职业技术学院’, 1)
(‘广东工商职业技术大学’, 1)
(‘韩山师范学院’, 1)
(‘广州市铁一中学’, 18)
(‘华南师范大学’, 103)
(‘北京师范大学珠海校区’, 20)
(‘电子科技大学中山学院’, 1)
(‘广州市水荫路小学’, 1)
(‘黑龙江大学’, 1)
(‘广东财经大学华商学院’, 7)
(‘广东技术师范大学’, 10)
(‘广东省科学职业技术学院’, 1)
(‘深圳中学’, 1)
(‘广东工程职业技术学院’, 1)
(‘河源职业技术学院’, 9)
(‘广东外语外贸大学南国商学院’, 6)

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值