pandas 笔记

pandas read_csv

import pandas as pd
pd.read_csv(filepath_or_buffer,header,parse_dates,index_col)
参数:
filepath_or_buffer:
字符串,或者任何对象的read()方法。这个字符串可以是URL,有效的URL方案包括http、ftp、s3和文件。可以直接写入"文件名.csv"
 
header:
将行号用作列名,且是数据的开头。
注意当skip_blank_lines=True时,这个参数忽略注释行和空行。所以header=0表示第一行是数据而不是文件的第一行。
 
【注】:如果csv文件中含有中文,该如何?
1、可修改csv文件的编码格式为unix(不能是windows)(用notepad++打开修改)
2、df = pd.read_csv(csv_file, encoding="utf-8"),设置读取时的编码或 encoding="gbk"
3、在使用列名来访问DataFrame里面的数据时,对于中文列名,应该在列名前面加'u',表示后面跟的字符串以unicode格式存储,如下所示
print(df[u"经度(度)"])
 
(1)、header=None
即指定原始文件数据没有列索引,这样read_csv为其自动加上列索引{从0开始}
ceshi.csv原文件内容:
c1,c2,c3,c4
a,0,5,10
b,1,6,11
c,2,7,12
d,3,8,13
e,4,9,14
 
df=pd.read_csv("ceshi.csv",header=None)
print(df)
结果:
    0   1   2   3
0  c1  c2  c3  c4
1   a   0   5  10
2   b   1   6  11
3   c   2   7  12
4   d   3   8  13
5   e   4   9  14
 
(2)、header=None,并指定新的索引的名字names=seq序列
df=pd.read_csv("ceshi.csv",header=None,names=range(2,6))
print(df)
结果:
    2   3   4   5
0  c1  c2  c3  c4
1   a   0   5  10
2   b   1   6  11
3   c   2   7  12
4   d   3   8  13
5   e   4   9  14
 
 
(3)、header=None,并指定新的索引的名字names=seq序列;如果指定的新的索引名字的序列比原csv文件的列数少,那么就截取原csv文件的倒数列添加上新的索引名字
df=pd.read_csv("ceshi.csv",header=0,names=range(2,4))
print(df)
结果:
        2   3
c1 c2  c3  c4
a  0    5  10
b  1    6  11
c  2    7  12
d  3    8  13
e  4    9  14
 
 
(4)、header=0
表示文件第0行(即第一行,索引从0开始)为列索引
df=pd.read_csv("ceshi.csv",header=0)
print(df)
结果:
  c1  c2  c3  c4
0  a   0   5  10
1  b   1   6  11
2  c   2   7  12
3  d   3   8  13
4  e   4   9  14
 
(5)、header=0,并指定新的索引的名字names=seq序列
df=pd.read_csv("ceshi.csv",header=0,names=range(2,6))
print(df)
结果:
   2  3  4   5
0  a  0  5  10
1  b  1  6  11
2  c  2  7  12
3  d  3  8  13
4  e  4  9  14
注:这里是把原csv文件的第一行换成了range(2,6)并将此作为列索引
 
(6)、header=0,并指定新的索引的名字names=seq序列;如果指定的新的索引名字的序列比原csv文件的列数少,那么就截取原csv文件的倒数列添加上新的索引名字
df=pd.read_csv("ceshi.csv",header=0,names=range(2,4))
print(df)
结果:
     2   3
a 0  5  10
b 1  6  11
c 2  7  12
d 3  8  13
e 4  9  14
 
 
parse_dates:
布尔类型值 or int类型值的列表 or 列表的列表 or 字典(默认值为 FALSE)
(1)True:尝试解析索引
(2)由int类型值组成的列表(如[1,2,3]):作为单独数据列,分别解析原始文件中的1,2,3列
(3)由列表组成的列表(如[[1,3]]):将1,3列合并,作为一个单列进行解析
(4)字典(如{'foo':[1, 3]}):解析1,3列作为数据,并命名为foo
 
 
index_col:
int类型值,序列,FALSE(默认 None)
将真实的某列当做index(列的数目,甚至列名)
index_col为指定数据中那一列作为Dataframe的行索引,也可以可指定多列,形成层次索引,默认为None,即不指定行索引,这样系统会自动加上行索引。
 
举例:
df=pd.read_csv("ceshi.csv",index_col=0)
print(df)
结果:
    c2  c3  c4
c1            
a    0   5  10
b    1   6  11
c    2   7  12
d    3   8  13
e    4   9  14
表示:将第一列作为索引index
 
df=pd.read_csv("ceshi.csv",index_col=1)
print(df)
结果:
   c1  c3  c4
c2           
0   a   5  10
1   b   6  11
2   c   7  12
3   d   8  13
4   e   9  14
表示:将第二列作为索引index
 
 
df=pd.read_csv("ceshi.csv",index_col="c1")
print(df)
结果:
    c2  c3  c4
c1            
a    0   5  10
b    1   6  11
c    2   7  12
d    3   8  13
e    4   9  14
表示:将列名"c1"这里一列作为索引index
【注】:这里将"c1"这一列作为索引即行索引后,"c1"这列即不在属于列名这类,即不能使用df['c1']获取列值
【注】:read_csv()方法中header参数和index_col参数不能混用,因为header指定列索引,index_col指定行索引,一个DataFrame对象只有一种索引
 
squeeze:
布尔值,默认FALSE
TRUE 如果被解析的数据只有一列,那么返回Series类型。

切片处理

data.loc用中括号,不是小括号

定位行列:data.loc[行索引, 列名]

只定位行:data.loc[行索引]

只定位列:data.loc[:, 列名]

oc和at的区别:

loc可以取多个值,at只能取一个格子里面的值,相当于上面图中的第一种用法

读取整个文件之后进行切片处理
读取文件:

import pandas as pd
df = pd.read_csv("路径\文件名称")
 
读取之后取出特定行、列:

# 第1行
print(df.iloc[0])
# 前3行
print(df.iloc[:3])
# 第1列
print(df.iloc[:, 0])
# 前2列
print(df.iloc[:, :2])
 
也可以这样:

#第四行到第十行
df[3:10]
#直接看某一列的值
df["列的名字"]


 
这种操作和一般的list之类的有点像。

不读取整个文件,读取特定的行与列
有时候遇见文件太大,我们直接读取所需要的的指定的行与列

读取行操作

import pandas as pd
#只读取前十五行
df = pd.read_csv("路径\文件名称",nrows = 15)
#读取第十行到第十五行
#pd.read_csv(路径,skiprows=需要忽略的行数,nrows=你想要读的行数)
pd.read_csv("路径\文件名称",skiprows=9,nrows=5),忽略前9行,往下读5行
 
读取列操作

import pandas as pd
#只读第一列,想读哪一列就在后面写哪一列
df = pd.read_csv("1217_1out.csv",usecols=[0])

 ================
# 读取第1行,第B列对应的值, 按标签取数据 data.loc[行索引, 列名]
data3 = data.loc[ 1, "B"]
# 读取第二行,第二列的值 ,即第n行,第n列数据,只接受整型参数
data1 = data.iloc[1, 1]
=================================

Python中缺失值删除 pd.dropna()函数:

df.dropna(how='all', inplace=True)

dropna()方法,能够找到DataFrame类型数据的空值(缺失值),将空值所在的行/列删除后,将新的DataFrame作为返回值返回。

1.函数详解

函数形式:dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

参数:

axis:轴。0或'index',表示按行删除;1或'columns',表示按列删除。

how:筛选方式。‘any’,表示该行/列只要有一个以上的空值,就删除该行/列;‘all’,表示该行/列全部都为空值,就删除该行/列。

thresh:非空元素最低数量。int型,默认为None。如果该行/列中,非空元素数量小于这个值,就删除该行/列。

subset:子集。列表,元素为行或者列的索引。如果axis=0或者‘index’,subset中元素为列的索引;如果axis=1或者‘column’,subset中元素为行的索引。由subset限制的子区域,是判断是否删除该行/列的条件判断区域。

inplace:是否原地替换。布尔值,默认为False。如果为True,则在原DataFrame上进行操作,返回值为None。

Python-pandas的dropna()方法-丢弃含空值的行、列_shangyj17的博客-CSDN博客

筛选数据集中指定某些列&行都为(不)空的行列

背景
最近在实战中遇到需要对大数据集的一些空值数据做处理,分类处理一些指定列名的列值都为空的数据行,并分别对拆分的两组数据的完整数据(其实就是利用其他列)进行数据计算处理。
下面抽象出两句解决方法:

源数据:
import numpy as np
import pandas as pd
nan = np.nan
data = {0: {0: 1.0, 1: nan, 2: 1.0},
1: {0: nan, 1: nan, 2: nan},
2: {0: 3, 1: 1, 2: 3},
4: {0: 5, 1: 5, 2: 5}}
df = pd.DataFrame(data)

算法思想:
1.先用指定列1&2,找到都为空的row的index
2.利用reindex重新筛选序列
3.利用isin在总数据集进行求反

index_c_r = df[[0,1]].dropna(how=‘all’,axis=0).index
df_allna = df.reindex(index=index_c_r )
df_not_allna = df[~df[0].isin(df_allna[0])]

注:
找到df中列0与列1都为空值的行的序列,并完整查询这两行;
0,1为指定的列名;
all为都为空值(any可以计算任一为空);
axis用0来指定处理行;
index为序
reindex指定筛选数据集相同的index

又遇到使用了,添一句:

ans_ na_val = ans[~ans[‘A’].isin(ans.dropna(how=‘any’)[‘A’])]

以上即可筛选出大数据集中,任一格为np.nan的所有行。(A为列名) 

-=================

Excel中,字母代表列,数字代表行,第三行第二列的单元格叫B3
 
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值