总结的pandas数据结构 和需要掌握的知识点
Pandas 数据结构
学习目标
掌握Series的常用属性及方法
掌握DataFrame的常用属性及方法
掌握更改Series和DataFrame的方法
掌握如何导入导出数据
创建Series和DataFrame
DataFrame和Series是Pandas最基本的两种数据结构
DataFrame和Series的区别联系:在Pandas中,Series是一维容器,Series表示DataFrame的每一列:
可以把DataFrame看作由Series对象组成的字典,其中key是列名,值是Series
Series和Python中的列表非常相似,但是它的每个元素的数据类型必须相同
创建Series
创建 Series 的最简单方法是传入一个Python列表
如果传入的数据类型是统一的数字,那么最终的dtype类型是int64
如果传入的数据类型是统一的字符串,那么最终的dtype类型是object
如果传入的数据类型是多种类型,那么最终的dtype类型也是object
import pandas as pd s = pd.Series(['banana', 42]) print(s) s = pd.Series(['banana', 'apple']) print(s) s = pd.Series([50, 42]) print(s) # 输出结果如下 0 banana 1 42 dtype: object 0 banana 1 apple dtype: object 0 50 1 42 dtype: int64 # 上面的结果中,左边显示的0,1是Series的索引,默认为0,1,2,3...
创建Series时,也可以通过index参数 来指定行索引
s = pd.Series(['Wes McKinney','Male'],index = ['Name','Gender']) print(s) # 输出结果如下 Name Wes McKinney Gender Male dtype: object
创建 DataFrame
可以使用字典来创建DataFrame
name_df = pd.DataFrame({'Name':['Tome','Bob'],'Occupation':['Teacher','IT Engineer'],'age':[28,36]}) print(name_df) # 输出结果如下Name Occupation age 0 Tome Teacher 28 1 Bob IT Engineer 36
创建DataFrame的时候可以使用colums参数指定列的顺序,也可以使用index来指定行索引
name_df = pd.DataFrame(data={'Occupation': ['Teacher', 'IT Engineer'],'Age': [28,36]},columns=['Age', 'Occupation'],index=['Tome', 'Bob'] ) print(name_df) # 输出结果如下Age Occupation Tome 28 Teacher Bob 36 IT Engineer
Series 常用操作
Series常用属性
使用 DataFrame的loc 属性获取数据集里的一行,就会得到一个Series对象
data = pd.read_csv('data/nobel_prizes.csv',index_col='id') data.head() # 输出结果如下图
使用行索引标签选择一条记录
one_row = data.loc[941] print(type(one_row)) print(one_row) # 输出结果如下 <class 'pandas.core.series.Series'> year 2017 category physics overallMotivation NaN firstname Rainer surname Weiss motivation "for decisive contributions to the LIGO detect... share 2 Name: 941, dtype: object
可以通过 index 和 values属性获取行索引和值
print(one_row.index) print(one_row.values) # 输出结果如下 Index(['year', 'category', 'overallMotivation', 'firstname', 'surname','motivation', 'share'],dtype='object') [2017 'physics' nan 'Rainer' 'Weiss''"for decisive contributions to the LIGO detector and the observation of gravitational waves"'2]
Series的keys方法,作用与index属性一样
data.keys() # 输出结果如下 Index(['year', 'category', 'overallMotivation', 'firstname', 'surname','motivation', 'share'],dtype='object')
Series的其他属性
属性 说明 loc 使用索引值取子集 iloc 使用索引位置取子集 dtype或dtypes Series内容的类型 T Series的转置矩阵 shape 数据的维数 size Series中元素的数量 values Series的值
例如
print(data.loc[941]) print(data.iloc[0]) print(data.shape, data.size) # 输出结果如下 year 2017 category physics overallMotivation NaN firstname Rainer surname Weiss motivation "for decisive contributions to the LIGO detect... share 2 Name: 941, dtype: object year 2017 category physics overallMotivation NaN firstname Rainer surname Weiss motivation "for decisive contributions to the LIGO detect... share 2 Name: 941, dtype: object (923, 7) 6461
Series常用方法
常见计算
针对数值型的Series,可以进行常见计算
平均值
#print(data.head()) share = data.share # 从DataFrame中 获取Share列(几人获奖)返回Series #print(share) print(share.mean()) #计算几人获奖的平均值 # 输出结果如下 1.982665222101842
最大值
share.max() # 计算最大值 # 输出结果如下 4
最小值
share.min() # 计算最小值 # 输出结果如下 1
标准差
share.std() # 计算标准差 # 输出结果如下 0.9324952202244597
2.2.2 value_counts函数
在获取某一列数据的Series对象后,通过
value_counts()
方法,可以返回以该列的值为分类依据,不同值的条目总数量;现在我们要对data/movie.csv
数据集进行统计,分别统计相同点赞数的主演数量;实现如下:
主演的facebook点赞数
movie = pd.read_csv('data/movie.csv') # 加载电影数据 actor_1_fb_likes = movie['actor_1_facebook_likes'] # 从电影数据中取出主演的facebook点赞数 actor_1_fb_likes.head() #查看主演的facebook点赞数 # 输出结果如下 0 1000.0 1 40000.0 2 11000.0 3 27000.0 4 131.0 Name: actor_1_facebook_likes, dtype: float64
分别统计相同点赞数的主演数量(有多少个主演的点赞数相同,且点赞数是多少)
actor_1_fb_likes.value_counts() # 输出结果如下【左列为点赞数,右列为主演数量】 1000.0 436 11000.0 206 2000.0 189 3000.0 150... 216.0 1 859.0 1 225.0 1 334.0 1 Name: actor_1_facebook_likes, Length: 877, dtype: int64
再来看一个例子,现用vlaue_count函数统计不同导演指导的电影数量
获取导演名字
director_name
列的Series对象
# movie = pd.read_csv('data/movie.csv') # 加载电影数据 director = movie['director_name'] # 从电影数据中获取导演名字 返回Series director.head() #查看导演Series数据 # 输出结果如下 0 James Cameron 1 Gore Verbinski 2 Sam Mendes 3 Christopher Nolan 4 Doug Walker Name: director_name, dtype: object
统计不同导演指导的电影数量,本质就是以
director_name
列的值做分类,分别统计不同数据的数量
director.value_counts() # 统计不同导演指导的电影数量 # 输出结果如下 Steven Spielberg 26 Woody Allen 22 Clint Eastwood 20 Martin Scorsese 20.. Gavin Wiesen 1 Andrew Morahan 1 Luca Guadagnino 1 Richard Montoya 1 Name: director_name, Length: 2397, dtype: int64
count函数
count函数可以统计Series对象中的非空值的总数(指定列中的数据没有空值,则计数+1)
统计有导演的电影数量
director.count() # 输出结果如下 4814
注意Series对象的count函数和value_counts函数的区别
Series对象的count函数:统计Series对象中的非空值的总数
Series对象的value_counts函数:统计以Series对象的值为分类依据,不同值的条目总数量
describe函数
Series对象的describe函数可以输出统计描述
查看
facebook上对主演点赞数
这一列数据的统计描述
actor_1_fb_likes.describe() # 输出结果如下 count 4909.000000 mean 6494.488491 std 15106.986884 min 0.000000 25% 607.000000 50% 982.000000 75% 11000.000000 max 640000.000000 Name: actor_1_facebook_likes, dtype: float64
查看
导演名字
这一列数据的统计描述
director.describe() # 输出结果如下 count 4814 unique 2397 top Steven Spielberg freq 26 Name: director_name, dtype: object
结果描述如下图所示
Series的其他方法列表
方法 | 说明 |
append | 连接两个或多个Series |
corr | 计算与另一个Series的相关系数 |
cov | 计算与另一个Series的协方差 |
describe | 计算常见统计量 |
drop_duplicates | 返回去重之后的Series |
equals | 判断两个Series是否相同 |
get_values | 获取Series的值,作用与values属性相同 |
hist | 绘制直方图 |
isin | Series中是否包含某些值 |
min | 返回最小值 |
max | 返回最大值 |
mean | 返回算术平均值 |
median | 返回中位数 |
mode | 返回众数 |
quantile | 返回指定位置的分位数 |
replace | 用指定值代替Series中的值 |
sample | 返回Series的随机采样值 |
sort_values | 对值进行排序 |
to_frame | 把Series转换为DataFrame |
unique | 去重返回数组 |
布尔值列表获取Series对象中部分数据
从
scientists.csv
数据集中,列出大于Age
列的平均值的具体值,具体步骤如下:
加载并观察数据集
scientists = pd.read_csv('data/scientists.csv') print(scientists) #print(scientists.head()) # 输出结果如下Name Born Died Age Occupation 0 Rosaline Franklin 1920-07-25 1958-04-16 37 Chemist 1 William Gosset 1876-06-13 1937-10-16 61 Statistician 2 Florence Nightingale 1820-05-12 1910-08-13 90 Nurse 3 Marie Curie 1867-11-07 1934-07-04 66 Chemist 4 Rachel Carson 1907-05-27 1964-04-14 56 Biologist 5 John Snow 1813-03-15 1858-06-16 45 Physician 6 Alan Turing 1912-06-23 1954-06-07 41 Computer Scientist 7 Johann Gauss 1777-04-30 1855-02-23 77 Mathematicia
计算
Age
的平均值
ages = scientists['Age'] ages.mean() # 输出结果如下 59.125
输出大于
Age
列的平均值的具体值
print(ages[ages>ages.mean()]) # 输出结果如下 1 61 2 90 3 66 7 77 Name: Age, dtype: int64
在本例中,
ages>ages.mean()
,到底是什么?为什么
ages[ages>ages.mean()]
就能返回我们想要的结果?
利用表达式
ages > ages.mean()
,获取布尔值构成的series对象
new_ages_s = ages>ages.mean() print(new_ages_s) print(new_ages_s.values) print(list(new_ages_s.values)) # 输出结果如下 0 False 1 True 2 True 3 True 4 False 5 False 6 False 7 True Name: Age, dtype: bool [False True True True False False False True] [False, True, True, True, False, False, False, True]
从Series中获取部分数据,可以通过标签,索引,也可以传入布尔值的列表
bool_values = (list(new_ages_s.values)) # 构造布尔值列表 ages[bool_values] # 通过布尔索引来控制,输出指定范围 # 输出结果如下 1 61 2 90 3 66 7 77 Name: Age, dtype: int64
Series 的运算
Series和数值型变量计算
Series和数值型变量计算时,变量会与Series中的每个元素逐一进行计算
加法
ages+100 # 输出结果如下 0 137 1 161 2 190 3 166 4 156 5 145 6 141 7 177 Name: Age, dtype: int64
乘法
ages*2 # 输出结果如下 0 74 1 122 2 180 3 132 4 112 5 90 6 82 7 154 Name: Age, dtype: int64
2.4.2 两个Series之间计算
两个Series之间计算,如果Series元素个数相同,则将两个Series对应元素进行计算
print(ages+ages) print('='*10) print(ages*ages) # 输出结果如下 0 74 1 122 2 180 3 132 4 112 5 90 6 82 7 154 Name: Age, dtype: int64 ========== 0 1369 1 3721 2 8100 3 4356 4 3136 5 2025 6 1681 7 5929 Name: Age, dtype: int64
元素个数不同的Series之间进行计算,会根据索引进行。索引不同的元素最终计算的结果会填充成缺失值,用NaN表示
print(ages) print('='*10) print(pd.Series([1,100])) print('='*10) print(ages + pd.Series([1,100])) # 输出结果如下 0 37 1 61 2 90 3 66 4 56 5 45 6 41 7 77 Name: Age, dtype: int64 ========== 0 1 1 100 dtype: int64 ========== 0 38.0 1 161.0 2 NaN 3 NaN 4 NaN 5 NaN 6 NaN 7 NaN dtype: float64:
练习1:元素个数不同的Series之间的乘法计算
print(ages * pd.Series([1,100])) # 合并多个Series为一个DataFrame new_df = pd.concat([ages, pd.Series([1,100]), ages * pd.Series([1,100])], axis=1) new_df # 输出结果如下 0 37.0 1 6100.0 2 NaN 3 NaN 4 NaN 5 NaN 6 NaN 7 NaN dtype: float64 Age 0 1 0 37 1.0 37.0 1 61 100.0 6100.0 2 90 NaN NaN 3 66 NaN NaN 4 56 NaN NaN 5 45 NaN NaN 6 41 NaN NaN 7 77 NaN NaN
练习2:Series对象ages和倒序的ages做相乘计算
# sort_index() 对索引进行排序 rev_ages = ages.sort_index(ascending=False) # 合并多个Series为一个DataFrame pd.concat([ages, rev_ages, ages*ages, ages*rev_ages], axis=1) # 输出结果如下Age Age Age Age 0 37 37 1369 1369 1 61 61 3721 3721 2 90 90 8100 8100 3 66 66 4356 4356 4 56 56 3136 3136 5 45 45 2025 2025 6 41 41 1681 1681 7 77 77 5929 5929
练习3:构造两个默认索引、且索引数量相同的Series,二者做相乘计算
# 构造两个默认索引、且数量相同的Series print(pd.Series([1,2])) print(pd.Series([3,4])) # 计算相乘 print(pd.Series([1,2])* pd.Series([3,4])) # 输出结果如下 0 1 1 2 dtype: int64 0 3 1 4 dtype: int64 0 3 1 8 dtype: int64
练习4:索引值不同的两个Series相乘
print(pd.Series([2,1])* pd.Series([3,4])) print(pd.Series([2,1],index = [2,3])* pd.Series([3,4])) # 输出结果如下 0 6 1 4 dtype: int64 0 NaN 1 NaN 2 NaN 3 NaN dtype: float64
练习5:索引值部分相同的两个Series相乘
print(pd.Series([2,1],index = [2,3])) print(pd.Series([3,4],index = [1,2])) print(pd.Series([3,4],index = [1,2])*pd.Series([2,1],index = [2,3])) # 输出结果如下 2 2 3 1 dtype: int64 1 3 2 4 dtype: int64 1 NaN 2 8.0 3 NaN dtype: float64
通过上述练习,得出Series之间计算的结论:
Series之间进行计算时,数据会尽可能依据索引标签的值进行相互计算
索引值相同的,对应计算得出新的Series
索引值不同的元素最终计算的结果会填充成缺失值,用NaN表示
DataFrame常用操作
DataFrame的常用属性和方法
DataFrame是Pandas中最常见的对象,Series数据结构的许多属性和方法在DataFrame中也一样适用
df.shape
行数和列数
movie = pd.read_csv('data/movie.csv') # 打印行数和列数 print(movie.shape) # 输出结果 (4916, 28)
df.size
数据的个数(列数*行数,NaN值也算)
# 打印数据的个数 movie.size # 输出结果 137648
df.ndim
数据的维度
# 该数据集的维度 movie.ndim # 输出结果 2
数据的长度(行数)
# 该数据集的长度 len(movie) # 输出结果 4916
各个列的非空值的个数
# 各个列的值的个数 movie.count() # 输出结果 color 4897 director_name 4814 num_critic_for_reviews 4867 duration 4901... actor_2_facebook_likes 4903 imdb_score 4916 aspect_ratio 4590 movie_facebook_likes 4916 Length: 28, dtype: int64
各个列的最小值
# 各列的最小值 movie.min() # 输出结果 num_critic_for_reviews 1 duration 7 director_facebook_likes 0 actor_3_facebook_likes 0... actor_2_facebook_likes 0 imdb_score 1.6 aspect_ratio 1.18 movie_facebook_likes 0 Length: 19, dtype: object
对整个df的统计描述,和series的统计描述返回相同
movie.describe()
DataFrame的布尔索引
同Series一样,DataFrame也可以使用布尔索引获取数据子集。
# 使用布尔索引获取duration列的值大于平均值的数据 print(movie['duration'] > movie['duration'].mean()) movie[movie['duration'] > movie['duration'].mean()] # 输出结果如下
本质就是传入布尔值构成的列表,来获取部分数据,True所对应的数据会被保留
# 获取前5行数据中的第1、2、4个 movie.head()[[True,True,False,True,False]] # 输出结果如下
color | director_name | num_critic_for_reviews | duration | director_facebook_likes | actor_3_facebook_likes | actor_2_name | actor_1_facebook_likes | gross | genres | ... | num_user_for_reviews | language | country | content_rating | budget | title_year | actor_2_facebook_likes | imdb_score | aspect_ratio | movie_facebook_likes | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Color | James Cameron | 723.0 | 178.0 | 0.0 | 855.0 | Joel David Moore | 1000.0 | 760505847.0 | Action|Adventure|Fantasy|Sci-Fi | ... | 3054.0 | English | USA | PG-13 | 237000000.0 | 2009.0 | 936.0 | 7.9 | 1.78 | 33000 |
1 | Color | Gore Verbinski | 302.0 | 169.0 | 563.0 | 1000.0 | Orlando Bloom | 40000.0 | 309404152.0 | Action|Adventure|Fantasy | ... | 1238.0 | English | USA | PG-13 | 300000000.0 | 2007.0 | 5000.0 | 7.1 | 2.35 | 0 |
3 | Color | Christopher Nolan | 813.0 | 164.0 | 22000.0 | 23000.0 | Christian Bale | 27000.0 | 448130642.0 | Action|Thriller | ... | 2701.0 | English | USA | PG-13 | 250000000.0 | 2012.0 | 23000.0 | 8.5 | 2.35 | 164000 |
3 rows × 28 columns
DataFrame的运算
DataFrame和数值进行运算
当DataFrame和数值进行运算时,DataFrame中的每一个元素会分别和数值进行运算
加载数据集并观察
scientists = pd.read_csv('data/scientists.csv') scientists.head()Name Born Died Age Occupation 0 Rosaline Franklin 1920-07-25 1958-04-16 37 Chemist 1 William Gosset 1876-06-13 1937-10-16 61 Statistician 2 Florence Nightingale 1820-05-12 1910-08-13 90 Nurse 3 Marie Curie 1867-11-07 1934-07-04 66 Chemist 4 Rachel Carson 1907-05-27 1964-04-14 56 Biologist
df和数值进行运算
scientists*2
两个DataFrame之间进行计算,和series一样会根据索引的值进行对应计算
scientists+scientists # 输出结果和 scientists*2 相同
当两个DataFrame索引值不能对应时,不匹配的会返回NaN
print(scientists) print('='*10) print(scientists[:4]) print('='*10) scientists+scientists[:4]
DataFrame其他操作
给行索引操作
加载数据文件后指定某列为索引
加载数据文件时,如果不指定行索引,Pandas会自动加上从0开始的索引;可以通过df.set_index('列名')
的方法重新对指定的列设置为索引
查看数据集,注意数据的列数
movie = pd.read_csv('data/movie.csv') movie # 输出结果如下图
指定某列为索引,并观察列数
movie2 = movie.set_index('movie_title') movie2
此时可以使用
df.reset_index()
重置索引,恢复为原来的df对象
加载数据文件时指定某列为行索引
加载数据文件的时候,可以通过通过index_col参数,指定使用某一列数据作为行索引;并通过reset_index()
方法可以重置索引
pd.read_csv('data/movie.csv', index_col='movie_title')
DataFrame修改行名和列名
df.rename()
函数修改行列名
DataFrame创建之后,可以通过rename()方法对原有的行索引名和列名进行修改
单独运行:加载数据,并指定列作为索引
pd.read_csv('data/movie.csv', index_col='movie_title')
单独运行:查看索引列前5个值
movie = pd.read_csv('data/movie.csv', index_col='movie_title') movie.index[:5]
单独运行:查看前5个列名
movie.columns[:5]
单独运行:替换索引值和列名
# 构造要修改的索引值对应字典 idx_rename = {'Avatar':'Ratava', 'Spectre': 'Ertceps'} # 构造要修改的列名对应字典 col_rename = {'director_name':'Director Name', 'num_critic_for_reviews': 'Critical Reviews'} # 替换并显示前5行数据 movie.rename(index=idx_rename, columns=col_rename).head()
整个执行过程如下图所示
对df的行列名重新赋值
如果不使用dfrename()
,也可以将df.index
和 df.columns
属性提取出来,修改之后,再赋值回去
单独运行:加载数据,并指定列作为索引,查看前3行数据
movie = pd.read_csv('data/movie.csv', index_col='movie_title') movie.head(3)
单独运行:分别查看数据的前5个索引值,和前5个列名
index_list = movie.index.tolist() column_list = movie.columns.tolist() print(index_list[:5],'\n',column_list[:5])
单独运行:修改列表中的具体的值
index_list[0] = 'Ratava' index_list[2] = 'Ertceps' column_list[1] = 'Director Name' column_list[2] = 'Critical Reviews' print(index_list[:5], '\n', column_list[:5])
单独运行:将修改值的列表分别赋值给df数据对象的index属性和columns属性
movie.index = index_list movie.columns = column_list movie.head(3)
添加删除插入列
添加列
通过
dataframe['列名']
添加新列,添加至最后
添加列名为
has_seen
的一列,值都为0
movie = pd.read_csv('data/movie.csv') movie['has_seen'] = 0 movie # 输出结果如下图
添加一个新列,列名为
actor_director_facebook_likes
,统计导演和123号主演的点赞数的总和
movie['actor_director_facebook_likes'] = (movie['actor_1_facebook_likes'] + movie['actor_2_facebook_likes'] + movie['actor_3_facebook_likes'] + movie['director_facebook_likes'] ) movie.head() # 输出结果如下图,注意:NaN与数值进行运算的结果都是NaN
删除列
调用
df.drop('列名', axis='columns')
方法删除列,参数axis='columns'
表示对列进行删除操作
new_movie = movie.drop('actor_director_facebook_likes', axis='columns') new_movie.head(5)
注意:错误演示,此时运行的结果还是会出现指定删除的列;原因是
df.drop()
返回的是一个新的df对象
,新df中没有指定删除的列,但原来的旧df中还是存在该列的
movie.drop('actor_director_facebook_likes', axis='columns') movie.head(5)
插入列
使用df.insert(loc=列下标数字, column='列名', value=该列所有的值)
方法插入列
计算在点赞数上,主演1的比主演2多多少;将计算的值作为列插入到原来第一列的前边;显示5行5列数据
movie = pd.read_csv('data/movie.csv') movie.insert(loc=0,column='actor1_likes-actor2_likes',value=movie['actor_1_facebook_likes'] - movie['actor_2_facebook_likes']) movie.iloc[list(range(5)), list(range(5))] # 输出结果如下 actor1_likes-actor2_likes color director_name num_critic_for_reviews duration 0 64.0 Color James Cameron 723.0 178.0 1 35000.0 Color Gore Verbinski 302.0 169.0 2 10607.0 Color Sam Mendes 602.0 148.0 3 4000.0 Color Christopher Nolan 813.0 164.0 4 119.0 NaN Doug Walker NaN NaN
导出和导入数据
Pickle文件
5.1.1 保存为pickle文件
调用to_pickle方法将以二进制格式保存数据
如要保存的对象是计算的中间结果,或者保存的对象以后会在Python中复用,可把对象保存为.pickle文件
如果保存成pickle文件,只能在python中使用
文件的扩展名可以是.p,.pkl,.pickle
scientists = pd.read_csv('data/scientists.csv') names = scientists['Name'] names.to_pickle('scientists_name.pickle') scientists.to_pickle('scientists_df.pickle')
读取pickle文件
可以使用pd.read_pickle函数读取.pickle文件中的数据
scientists_name = pd.read_pickle('scientists_name.pickle') print(scientists_name) # 输出结果如下 0 Rosaline Franklin 1 William Gosset 2 Florence Nightingale 3 Marie Curie 4 Rachel Carson 5 John Snow 6 Alan Turing 7 Johann Gauss Name: Name, dtype: object
CSV文件
我们用pd.read_csv()
函数读取csv文件,使用df.to_csv()
将数据保存为csv文件
在CSV文件中,对于每一行,各列采用逗号分隔;使用
\n
换行符换行除了逗号,还可以使用其他类型的分隔符,比如TSV文件,使用制表符作为分隔符
CSV是数据协作和共享的首选格式,因为可以使用excel打开
# 默认使用逗号作为分隔符 names.to_csv('scientists_name.csv') # TSV文件,设置分隔符必须为\t scientists.to_csv('scientists_df.tsv', sep='\t') #不在csv文件中写行名 scientists.to_csv('scientists_df_noindex.csv', index=False)
Excel文件
注意:根据anaconda的版本不同,pandas读写excel有时需要额外安装
xlwt
、xlrd
、openpyxl
三个包pip install -i https://pypi.tuna.tsinghua.edu.cn/simple xlwt pip install -i https://pypi.tuna.tsinghua.edu.cn/simple openpyxl pip install -i https://pypi.tuna.tsinghua.edu.cn/simple xlrd
保存成Excel文件
Series这种数据结构不支持to_excel方法,想保存成Excel文件,需要把Series转换成DataFrame
names_df = names.to_frame() import xlwt names_df.to_excel('scientists_name_df.xls') names_df.to_excel('scientists_name_df.xlsx') # xls 是一个特有的二进制格式,其核心结构是复合文档类型的结构,而 xlsx 的核心结构是 XML 类型的结构,采用的是基于 XML 的压缩方式,使其占用的空间更小;xlsx的最后一个x表是xml # xls是excel2003及以前版本生成的文件格式,而xlsx是excel2007及以后版本生成的文件格式。
DataFrame直接保存为Excel格式
scientists.to_excel('scientists_df.xlsx', sheet_name='scientists', index=False)
5.3.2 读取Excel文件
使用pd.read_excel()
读取Excel文件
pd.read_excel('scientists_df.xlsx') # 输出结果如下Name Born Died Age Occupation 0 Rosaline Franklin 1920-07-25 1958-04-16 37 Chemist 1 William Gosset 1876-06-13 1937-10-16 61 Statistician 2 Florence Nightingale 1820-05-12 1910-08-13 90 Nurse 3 Marie Curie 1867-11-07 1934-07-04 66 Chemist 4 Rachel Carson 1907-05-27 1964-04-14 56 Biologist 5 John Snow 1813-03-15 1858-06-16 45 Physician 6 Alan Turing 1912-06-23 1954-06-07 41 Computer Scientist 7 Johann Gauss 1777-04-30 1855-02-23 77 Mathematician
【了解】feather
格式文件
feather是一种文件格式,用于存储二进制对象
feather对象也可以加载到R语言中使用
feather格式的主要优点是在Python和R语言之间的读写速度要比CSV文件快
feather数据格式通常只用中间数据格式,用于Python和R之间传递数据
一般不用做保存最终数据
【了解】数据导出的其他方法
将excel中的数据读出,并导出为json文件
pd.read_excel('scientists_df.xlsx').to_json('scientists_df.json')
其他导出方法清单
导出方法 说明 to_clipboard 把数据保存到系统剪贴板,方便粘贴 to_dict 把数据转换成Python字典 to_hdf 把数据保存为HDF格式 to_html 把数据转换成HTML to_json 把数据转换成JSON字符串 to_sql 把数据保存到SQL数据库
总结
创建Series和DataFrame
pd.Series
pd.DataFrame
Series常用操作
常用属性
index
values
shape,size,dtype
常用方法
max(),min(),std()
count()
describe()
布尔索引
运算
与数值之间进行算数运算会对每一个元素进行计算
两个Series之间进行计算会索引对齐
DataFrame常用操作
常用属性
常用方法
布尔索引
运算
更改Series和DataFrame
指定行索引名字
dataframe.set_index()
dataframe.reset_index()
修改行/列名字
dataframe.rename(index=,columns = )
获取行/列索引 转换成list之后,修改list再赋值回去
添加、删除、插入列
添加 dataframe['新列‘']
删除 dataframe.drop
插入列 dataframe.insert()
导入导出数据
pickle
csv
Excel
feather
总结的pandas数据结构 和需要掌握的知识点相关推荐
- Pandas数据结构
Pandas数据结构 "一维数组"Serise Series "系列" Series 数据结构 Series 是带有标签的一维数组,可以保存任何数据类型(整数, ...
- 【pandas数据分析】pandas数据结构
文章目录 Series 创建Series 从dict创建 从ndarray创建 从标量创建 Series的特性 类ndarray 类dict 向量化操作与标签对齐 名称属性 DataFrame 创建D ...
- pandas 入门(pandas 数据结构介绍)
pandas 数据结构介绍 一.pandas 基础数据结构 1.pandas 中主要有两种数据结构:Series 和 DataFrame. 2.Series:一种一维的数组型对象,它包含了一个值序列( ...
- Pandas 数据结构
Pandas处理以下三个数据结构 - 系列(Series) 数据帧(DataFrame) 面板(Panel) 这些数据结构构建在Numpy数组之上,这意味着它们很快. 维数和描述 考虑这些数据结构的最 ...
- Pandas数据结构:Series定义和创建
文章目录 Series 定义 创建 Pandas中重要的两个数据结构:Series和DataFrame.数据分析必学的两种数据结构,这两种数据结构以Numpy的Ndarray为基础,在Ndarray的 ...
- Python数据分析——pandas数据结构(DataFrame)
一.pandas数据结构–DataFrame DataFrame 是表格型的数据结构,每列值的数据类型可以不同,也可以相同 DataFrame 常用于二维数据. DataFrame 的属性: valu ...
- python数据分析包pandas论文_python数据分析pandas包入门学习(一)pandas数据结构介绍...
本文参考<利用python进行数据分析>的第五章 pandas入门python 1 pandas数据结构介绍 pandas有两种主要的数据结构:series和DataFrame Serie ...
- pandas数据结构:Series/DataFrame;python函数:range/arange
1. Series Series 是一个类数组的数据结构,同时带有标签(lable)或者说索引(index). 1.1 下边生成一个最简单的Series对象,因为没有给Series指定索引,所以此时会 ...
- Pandas数据结构简介
Series Series 类似一维数组,由一组数据及一组相关数据标签组成.使用pandas的Series类即可创建. import pandas as pd s1 = pd.Series(['a', ...
最新文章
- 顺序表-元素逆置(首尾交换)
- 结合深度学习的图像修复怎么实现?
- Shiro + JWT + Spring Boot Restful 简易教程
- mysql树形结构查询_MySQL递归查询所有子节点,树形结构查询
- 使用Java8新特性(stream流、Lambda表达式)实现多个List 的笛卡尔乘积 返回需要的List<JavaBean>
- python怎么开发软件_怎么使用python进行软件开发
- 运行APP脚本的步骤
- CSS3实现卡片翻转动画
- js如何实现扫描身份证识别_JavaScript实现身份证验证代码
- 【微信登录】APP/网站应用的微信扫码登录
- office文档管理服务器编辑,office在线编辑方案
- linux测试消息队列阻塞,Linux进程间通信:消息队列
- Power Apps 创建响应式布局
- 各省市大学 全国各个省市重点民办本专科大学
- 阿里云部署flask项目
- 新年新气象,重新出发
- Android Studio 必备技巧:TODO 用法及自定义 TODO
- 企业实战zabbix(7)--结合qqmail(报警信息发给qq用户)
- visualmap折线图_四、制作图表(复杂折线图)
- python图像纹理提取_提取图像的颜色、纹理特征(传统算法)