DataFrame相关操作

Series数据操作

res = pd.Series([111,222,333,444])
#
res['a'] = 123
#
res.loc[1]
#
res[0] = 1
#
del res[0]

 算术运算符

add  加(add)  
sub  减(substract)
div   除(divide)
mul  乘(multiple)

srl = pd.Series([12,23,34],index=['c','a','d'])
sr3 = pd.Series([11,20,10,14],index=['d','c','a','b'])
sr1.add(sr3,fill_value=0)

 DataFrame创建方式

表格型数据结构,相当一个二维数组,含有一组有序的列也可以看作是由Series组成的共有一个索引的字典

第一种:

res = pd.DataFrame({'one':[1,2,3,4],'two':[4,3,2,1]})

第二种:

pd.DataFrame({'one':pd.Series([1,2,3],index=['a','b','c']),'two':pd.Series([1,2,3],index=['b','a','c'])})

第三种:

pd.DataFrame(np.array([[10,20],[30,40]]),index=['a','b'],columns=['c1','c2'])

 更多:

pd.DataFrame([np.arrange(1,8),np.arange(11,18)])
s1 = pd.Series(np.arange(1,9,2))
s2 = pd.Series(np.arange(2,10,2))
s3 = pd.Series(np.arange(5,7),index=[1,2])
df5 = pd.DataFrame({'c1':s1,'c2':s2,'c3':s3})

 

 以上创建方式都仅仅做一个了解即可(先做到心中有数即可)

因为工作中dataframe的数据一般都是来自于外部文件数据,而不是自己手动去创建

常见属性

1.index    行索引
2.columns   列索引    
3.T             转置
4.values      值索引
5.describe    快速统计   

 

DataFrame数据类型补充

 在DataFrame中所有的字符类型数据在查看数据类型的时候都表示成object

读取外部数据

pd.read_csv()      # 可以读取文本文件和.csv文件数据      
pd.read_excel()    # 可以读取excel表格文件数据
pd.read_sql()      # 可以读取MySQL表格数据  
pd.read_html()     # 可以读取页面上table标签内所有的数据       

文本文件读取

pd.read_csv(filepath_or_buffer,sep=',',header='infer',names=None,usecols=None,skiprows=None,skipfooter=None,converters=None,enconding=None)

filepath_or_buffer:指定txt文件或csv文件所在的具体路径

sep:指定原数据集中各子段之间的分隔符,默认为逗号","
    id     name     income
    1     jason     10

header:是否需要将原数据集中的第一行作为表头,默认将第一行用作字段名称
     如果原始数据没有表头需要将该参数设置为None

names:如果原数据集中没有字段,可以通过该参数在数据读取时给数据框添加具体的表头

usecols:指定需要读取原数据集中的哪些变量名

skiprows:数据读取时,指定需要跳过原数据集末尾的行数
        有一些表格开头是有几行文字说明的,读取的时候应该跳过
      
converters:用于数据类型的转换(以字典的形式指定)

encoding:如果文件中含有中文,有时需要指定字符编码      

基本使用

import pandas as pd
data01 = pd.read_csv(r'data_test01.txt',
              skiprows = 2,  # python能自动过滤完全无内容的空行(2,3都行)
              sep = ',',  # 默认就是逗号 写不写都行
              skipfooter = 3,
               )
# 1.针对id原本是01,02自动变成了1、2...
converters = {'id':str}
# 2.点击文件另存为修改文件编码之后再次读取出现乱码
encoding = ’utf-8'
# 3.移除收入千分位非逗号的其他符号
thousands = '&
# 4. 手动将文件表头行删除再次读取
header = None # 默认用索引
names =['id','year','month','day','gender','occupation','income']
# 5.指定读取的字段
usecols = ['id','income']              

查看方法帮助

方式一

  方法名?

方式二

  光标停留在方法名左括号后面

  先按住shift键不松开,再按tab键(没反应就多按几次)

excel表格读取

pd.read_excel(io,sheetname=0,header=0,skiprows=None,skip_footer=0,index_col=None,names=None,
na_values=None,thousands=None,convert_float=True)

io:指定电子表格的具体路径

sheetname:指定需要读取电子表格中的第几个Sheet,既可以传递整数也可以传递具体的Sheet名称

header:是否需要将数据集的第一行用作表头,默认是需要的

skiprows:读取数据时,指定跳过的末尾行数

skip_footer:读取数据时,指定跳过的末尾行数

index_col:指定哪些列用作数据框的行索引(标签)

na_values:指定原始数据中哪些特殊值代表了缺失值

thousands:指定原始数据集中的千分位符

converters:通过字典的形式,指定默写列需要转换的形式

 eg:

pd.read_excel(r'data_text02.xlsx',

  header = None,

  names = ['ID','Product','Color','Size'],

  converters = {'ID':str}

  )

数据库数据读取

# 在anaconda环境下直接安装
# pymysqlmokuai
import pymysql
conn = pymysql.connert(host,port,user,password,database,charset)

host:指定需要访问的MySQL服务器
port:指定访问MySQL数据库的端口号 charset:指定读取MySQL数据库的字符集,如果数据库表中含有中文,一般可以尝试将该参数设置为"utf8"或者"gbk"
user:指定访问MySQL数据库的用户名
password:指定访问MySQL数据库的密码
database:指定MySQL数据库的具体库名

# 利用pymysql创建好链接MySQL的链接之后即可通过该链接操作MySQL
pd.read_sql('select * from user',con = conn)
conn.close() # 关闭链接

网页表格数据读取

pd.read_html(r'https://baike.baidu.com/item/NBA%E6%80%BB%E5%86%A0%E5%86%9B/2173192?fr=aladdin')

数据概览

df.columns # 查看列

df.index # 查看行

df.shape # 行列

df.dtypes # 查看数据类型

df.head() # 取头部多条数据

df.tail() # 取尾部多条数据

行列操作

df['列字段名词']    # 获取指定列对应的数据

df.rename(column={'旧列名称':'新列名称'})

# 创建新的列
df['新列名称']=df.列名称//(df.列名称1+df.列名称2)

# 自定义位置
df.insert(3,'新列名称',新数据)

# 添加行
df3 = df1.append(df2)

数据筛选

# 获取指定列数据
df['列名'] # 单列数据
df['列名1','列名2',...]]    # 多列数据

# 获取指定行数据
sec_buildings.loc[se_buildings["region"]=='浦东']

sec_buildings.loc[(sec_buildings["region"] == '浦东’) & (sec_buildings['size'] > 150),]

sec_buildings.loc[sec_buidlings["region"] == '浦东’) & (sec_buildings['size'] >150),['name','tot_amt','price_unit']]

数据处理

sec_car = pd.read_csv(r'sec_cars.csv')

sec_car.head()

sec_car.dtypes

sec_car.Boarding_time = pd.to_datetime(sec_car.Boarding_time,format ='%Y年%M月')


sec_car.New_price = sec_car.New_price.str[:-1].astype(float)

 

posted @ 2021-10-17 13:04  lovewx35  阅读(84)  评论(0)    收藏  举报