.Seris是一个一维数组对象,可以有不同的数组类型,与numpy的一维array不同的是除了包含一组数据还包含一组索引。
import numpy as np
import pandas as pd
a = pd.Series(np.arange(1,10))
b = pd.Series([6,"dd",9,"ffc"])
print(a)
print(b)
输出:
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
dtype: int32
0 6
1 dd
2 9
3 ffc
dtype: object
可以看到,返回了数据类型:object(对象)
可以指定索引的数据类型,如可以指定索引为大写字母,index为内置属性
import numpy as np
import pandas as pd
import string
a = pd.Series(np.arange(1,10))
b = pd.Series([6,"dd",9,"ffc"])
c = pd.Series(np.arange(10),index=list(string.ascii_uppercase[:10]))
#print(a)
#print(b)
print(c)
输出:
A 0
B 1
C 2
D 3
E 4
F 5
G 6
H 7
I 8
J 9
dtype: int32
Process finished with exit code 0
通过字典推导式生成字典,再用Series生成数组,注意字典的键就是索引,且Series()函数没有返回值,原地 *** 作字典,需要重新赋值给其他变量,如下所示
a = pd.Series(np.arange(1,10))
b = pd.Series([6,"dd",9,"ffc"])
c = pd.Series(np.arange(10),index=list(string.ascii_uppercase[:10]))
d = {string.ascii_uppercase[i]:i for i in range(10)}#字典推导式生成字典
pd.Series(d)
#e = pd.Series(d)
#print(a)
#print(b)
#print(c)
print(d)
输出:
{'A': 0, 'B': 1, 'C': 2, 'D': 3, 'E': 4, 'F': 5, 'G': 6, 'H': 7, 'I': 8, 'J': 9}
import numpy as np
import pandas as pd
import string
a = pd.Series(np.arange(1,10))
b = pd.Series([6,"dd",9,"ffc"])
c = pd.Series(np.arange(10),index=list(string.ascii_uppercase[:10]))
d = {string.ascii_uppercase[i]:i for i in range(10)}#字典推导式生成字典
#pd.Series(d)
e = pd.Series(d)
#print(a)
#print(b)
#print(c)
#print(d)
print(e)
输出:
A 0
B 1
C 2
D 3
E 4
F 5
G 6
H 7
I 8
J 9
dtype: int64
若重新指定索引
import numpy as np
import pandas as pd
import string
a = pd.Series(np.arange(1,10))
b = pd.Series([6,"dd",9,"ffc"])
c = pd.Series(np.arange(10),index=list(string.ascii_uppercase[:10]))
d = {string.ascii_uppercase[i]:i for i in range(10)}#字典推导式生成字典
#pd.Series(d)
#e = pd.Series(d)
f = pd.Series(d,index=list(string.ascii_uppercase[5:15]))
输出:
F 5.0
G 6.0
H 7.0
I 8.0
J 9.0
K NaN
L NaN
M NaN
N NaN
O NaN
dtype: float64
出现了nan值,且数据类型变为字符型。因为若重新指定其他索引,能够对应上原来的值则取其值,对应不上则为nan,可以看到F之前的值都没了,J之后为nan,类型变为float是因为nan,在numpy中nan为float,pandas会根据数据类型改成统一的数据类型。修改dtype和numpy一样,调用内置属性astype()即可,f.astype(int).切片和索引则和numpy一样,切片:传入参数(start:end:stride),索引则是传入序号。
2.访问Serise索引和值
import numpy as np
import pandas as pd
import string
a = pd.Series(np.arange(1,10))
b = pd.Series([6,"dd",9,"ffc"])
c = pd.Series(np.arange(10),index=list(string.ascii_uppercase[:10]))
print(c.index)
print(c.values)
print(type(c.index))
输出:
Index(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'], dtype='object')
[0 1 2 3 4 5 6 7 8 9]
c.index,内置属性,无需传参,打印即可。
3.pd.read_csv("./dogNames2.csv",header=None)读取csv文件
4.读取mongodb数据库,还不懂咋用,先做个记录
5.pandas的DataFrame
Series是一维带索引的数组,而DataFrame则是二维,Series的容器,帧,有宽和高,顾名思义,i名字起得不错
#coding = uft-8
import numpy as np
import pandas as pd
a = pd.DataFrame(np.arange(12).reshape(3,4))
print(type(a))
print(a)
输出:
0 1 2 3
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
可以看到,我们规定了形状(3,4)之后,DataFrame对象既有行索引,又有列的索引
行索引,表明不同行,横向索引,叫index,0轴,axis=0;列索引,表明不同列,纵向索引,叫columns,1轴,axis=1。个人认为axis这个参数很重要,以后肯定还会遇到,axis=0表示行,axis=1表示列。
6.pandas还有很多 *** 作,获取行列数据,索引,改变某一个值,与numpy一样,只是封装的函数不同,后面回来更。
7.split()函数:拆分字符串,通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list)
8.set,python里的组合,不允许重复,且set里的内容位置是随意的,所以不能用索引列出。可进行关系测试,删除重复数据。
#coding=utf-8
import pandas as pd
import numpy as np
file_path = "IMDB-Movie-Data.csv"
df = pd.read_csv(file_path)
#pd.set_option('display.max_row', None)#显示全部行
#print(df.info()) #查看每个数据的数目
pd.set_option('display.max_columns', None)#显示全部列
print(df.head(1))
print(df["Rating"].mean())
#统计导演人数
#print(len(set(df["Director"].tolist()))) #set()函数,一个不允许重复的组合,用于关系测试,删除重复数据
print(len(df["Director"].unique()))#unique函数
#获取演员人数
temp_actors_list = df["Actors"].str.split(", ").tolist()
'''
#split,分割函数,以什么样的符号分割再返回列表,再set,删除
分割符应打印出来再复制进去,不能凭主观意志
重复的,tolist是转换成列表
#此处 *** 作会生成二维列表,即嵌套列表[[]],所以下面是两个for循环
'''
print(temp_actors_list)
actors_list = [i for j in temp_actors_list for i in j]
'''
因生成二维列表,所以两个for循环可以将其转换成一维列表
[[]]变成[],常规 *** 作
'''
print(actors_list)
#np.array(temp_actors_list).flatten()
actors_num = len(set(actors_list))
print(actors_num)
#print(a_list)
#coding=utf-8,很重要,不然可能解码错误。
9.先空置,学到再继续记录
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)