目录
用DataFrame对象.to_csv()方法来保存数据成csv文件
Python3 df.loc和df.iloc函数用法及提取指定行列位置处数值
python简单实现数据行转列(利用pandas和numpy)
用DataFrame对象.to_csv()方法来保存数据成csv文件
DataFrame 数据的保存和读取:
df.to_csv #写入到 csv 文件
pd.read_csv #读取 csv 文件
df.to_json #写入到 json 文件
pd.read_json #读取 json 文件
df.to_html #写入到 html 文件
pd.read_html #读取 html 文件
df.to_excel #写入到 excel 文件
pd.read_excel #读取 excel 文件
DataFrame.to_csv(path_or_buf=None, sep=', ', na_rep='', float_format=None, columns=None, header=True, index=True,
index_label=None, mode='w', encoding=None, compression=None, quoting=None, quotechar='"',
line_terminator='\n', chunksize=None, tupleize_cols=None, date_format=None, doublequote=True,
escapechar=None, decimal='.')
参数:
path_or_buf #文件路径,如果没有指定则将会直接返回字符串的 json
sep #输出文件的字段分隔符,默认为 “,”
na_rep #用于替换空数据的字符串,默认为’’
float_format #设置浮点数的格式(几位小数点)
columns #要写的列
header #是否保存列名,默认为 True ,保存
index #是否保存索引,默认为 True ,保存
index_label #索引的列标签名
pd.read_csv()方法来读取csv文件
read_csv中的基本参数
filepath_or_buffer
- 数据输入的路径:可以是文件路径、可以是URL,也可以是实现read方法的任意对象。
- 这个参数,就是我们输入的第一个参数。
pd.read_csv("data.csv")
- 还可以是一个URL,如果访问该URL会返回一个文件的话,
- 那么pandas的read_csv函数会自动将该文件进行读取。
pd.read_csv("http://localhost/data.csv")
- 里面还可以是一个 _io.TextIOWrapper,甚至是临时文件。比如:
//_io.TextIOWrapper
f = open("data.csv", encoding="utf-8")
pd.read_csv(f)
//临时文件
import tempfile
tmp_file = tempfile.TemporaryFile("r+")
tmp_file.write(open("girl.csv", encoding="utf-8").read())
tmp_file.seek(0)
pd.read_csv(tmp_file)
- 一般情况下,我们直接读取csv文件较多。read_csv等方法使用时,直接加上r即可食用:
pd.read_csv(r"F:\test_data.csv")
python使用pandas读xlsx文件
import pandas as pd
1.读取前n行数据
#1.读取前n行所有数据
df1=pd.read_excel('d1.xlsx')#读取xlsx中的第一个sheet
data1=df1.head(10)#读取前10行所有数据
data2=df1.values#list【】 相当于一个矩阵,以行为单位
#data2=df.values() 报错:TypeError: 'numpy.ndarray' object is not callable
print("获取到所有的值:\n{0}".format(data1))#格式化输出
print("获取到所有的值:\n{0}".format(data2))
2.读取指定数据(指定行指定列)
#2.读取特定行特定列
data3=df1.iloc[0].values#读取第一行所有数据
data4=df1.iloc[1,1]#读取指定行列位置数据:读取(1,1)位置的数据
data5=df1.iloc[[1,2]].values#读取指定多行:读取第一行和第二行所有数据
data6=df1.iloc[:,[0]].values#读取指定列的所有行数据:读取第一列所有数据
print("数据:\n{0}".format(data3))
print("数据:\n{0}".format(data4))
print("数据:\n{0}".format(data5))
print("数据:\n{0}".format(data6))
3.获取文件行号和列标题
#3.获取xlsx文件行号、列号
print("输出行号列表{}".format(df1.index.values))#获取所有行的编号:0、1、2、3、4
print("输出列标题{}".format(df1.columns.values))#也就是每列的第一个元素
4.将数据转换为字典形式
#4.将xlsx数据转换为字典
data=[]
for i in df1.index.values:#获取行号的索引,并对其遍历
#根据i来获取每一行指定的数据,并用to_dict转成字典
row_data=df1.loc[i,['id','name','class','data','score',]].to_dict()
data.append(row_data)
print("最终获取到的数据是:{0}".format(data))
5.iloc和loc的区别:
iloc #根据行号来索引
loc #根据index来索引
#所以1,2,3应该用iloc,4应该有loc
python 删除特定列_pandas删除某一列
方法一:直接del df['column-name']
df #显示数据
del df['column-name'] #column-name: 列的名字
方法二:采用drop方法,有下面三种等价的表达式:
1. df= df.drop('column_name', 1)
#输入:
df.drop('num',axix=1) #不改变内存,及输入df的时候,它还是显示原数据
df
2. df.drop('column_name',axis=1, inplace=True)
#输入:
df.drop('num',axix=1,inplace=True) #改变内存,及输入df的时候,它显示改变后的数据
df
3. df.drop([df.columns[[0,1, 3]]], axis=1,inplace=True)
#输入:
df.drop([df.columns[[0,1]]],axis=1,inpalce=True)
总结:凡是会对原数组作出修改并返回一个新数组的,往往都有一个 inplace可选参数。
- 如果手动设定为True(默认为False),那么原数组直接就被替换。
- 也就是说,采用inplace=True之后,原数组名对应的内存值直接改变;
- 而采用inplace=False之后,原数组名对应的内存值并不改变,需要将新的结果赋给一个新的数组或者覆盖原数组的内存位置。
通过pandas
删除列:
del df['columns'] #改变原始数据
df.drop('columns',axis=1) #删除不改表原始数据,可以通过重新赋值的方式赋值该数据
df.drop('columns',axis=1,inplace='True') #改变原始数据
Python3 df.loc和df.iloc函数用法及提取指定行列位置处数值
df.loc和df.iloc函数用法的df,由pandas.read_csv()函数读取文件而来。
Data Frame. loc
- 主要是由字符串作为标签获取,有时也可用布尔型去获取。
- df.loc主要是依赖于行列的index字符串名,去索取指定行列位置处的值。
- loc[]括号内还可以加条件,如df.loc[df[‘shield’] > 6].
根据行列名去提取数值
import pandas as pd
fn = '#文件路径\\xxx.csv'
df = pd.read_csv(fn)
print(df.loc[1,'409'])
此方法不一定每次都行,在代码中经常遇到bug
- 用iloc[]无此问题
print(df.iloc[1,'409'])
提取某些行
import pandas as pd
fn = '#文件路径\\xxx.csv'
df = pd.read_csv(fn)
print(df.loc[[1,2]])
#[[1,2]]指同时提取1,2行
提取某些列
print(df.loc[1,4:6])
DataFrame.iloc
由行列号去获取,
如果获取指定行列号处的值,
- 而表中又没有行列名使用,
- 或者只有列名,没有行名(大多数情况下),
那么推荐使用iloc.
根据行列号提取数值
import pandas as pd
fn = '#文件路径\\xxx.csv'
df = pd.read_csv(fn)
print(df.iloc[1,2])
直接指定行列号,方便快捷,其中的行号不计列名那一行,从数值区域开始。
提取某些行
第一行,所有列
print(df.iloc[1,:])
提取某些列
第一行,第4、5列
print(df.iloc[1,4:6])
Python中的index()方法
List 列表中使用 .index()
1.1 介绍
-
对列表使用 index(a) 是查找列表中的对应元素 a 的第一个位置索引值
-
返回查找对象的索引位置, 没有找到对象会抛出异常
1.2 参数介绍
list.index(x[, start[, end]])
-
x : 想要查找的对象
-
start : 可选参数, 查找的起始位置
-
end : 可选参数, 查找的结束位置
1.3 示例
a = [0, 1, 2, 'm', 'l']
print(a[3])
print(a.index('m'))
>>> m
>>> 3
对字符串str 使用 .index()
index()功能:
- Python index() 方法检测字符串中是否包含子字符串 str ,
- 如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,
- 该方法与 python find()方法一样,只不过如果str不在 string中会报一个异常。
index()语法:
str.index(str, beg=0, end=len(string)) # str:substring
str.index(sub[,start[,end]])
-
substring -- 指定检索的字符串
-
beg -- 开始索引,默认为 0
-
end -- 结束索引,默认为字符串的长度,如果不指定,默认一直检索到结尾。
-
str:表示原字符串;
-
sub:表示要检索的子字符串;
-
start:表示检索开始的起始位置,如果不指定,默认从头开始检索;
代码:
>>> str = "c.biancheng.net"
>>> str.index('.')
1
str1 = "this is string example....wow!!!"
str2 = "exam"
print(str1.index(str2))
当要在列表中查找某个元素并输出对应的索引值(位置),
这时就需要使用到index()方法
list.index(obj)
代码:
A = [123, 'xyz', 'zara', 'abc']
print(A.index('xyz'))
# 结果为: 1
print(A.index('zzz'))
# 报错 :ValueError: 'zzz' is not in list
rindex() 方法
同 find() 和 rfind
() 一样,字符串变量还具有 rindex() 方法,其作用和 index() 方法类似,不同之处在于它是从右边开始检索,例如:
>>> str = "c.biancheng.net"
>>> str.rindex('.')
11
Python Pandas DataFrame取列
1.取一列
建立一个dataframe结构:df
import numpy as np
import pandas as pd
dfd = {11:["a","b","c"],22:["d","e","f"],33:["g","h","i"]}
df = pd.DataFrame(dfd)
得到如下,列名为11,22,33的一个3*3矩阵
>>> df
11 22 33
0 a d g
1 b e h
2 c f i
-
以列名取列
>>> df_11 = df[11] >>> df_11 0 a 1 b 2 c Name: 11, dtype: object
-
以列号取列(第几列)
#使用iloc方法,iloc[row行,column列], #取一整列的意思就是使列一样,把这一列里的每一行都取出来。 >>> df_22 = df.iloc[:,1] >>> df_22 0 d 1 e 2 f Name: 22, dtype: object
2.取多列
-
>>> df_11_33 = df[[11,33]] >>> df_11_33 11 33 0 a g 1 b h 2 c i
-
以列号(第几列)
>>> kk = df.iloc[:,[0,2]] >>> kk 11 33 0 a g 1 b h 2 c i
python简单实现数据行转列(利用pandas和numpy)
import pandas as pd
import numpy as np
#生成行列格式数据
df=pd.DataFrame(np.random.randn(20).reshape(4,5),index=[['a','b','c','d']],columns=[10,20,30,40,50])
print(df)
#观察初始结构
# 10 20 30 40 50
#a 0.135203 -0.508673 0.772628 -1.415804 0.973777
#b -0.293076 -0.254650 2.138923 0.688851 1.413482
#c 0.875853 2.062340 1.347623 1.260754 -1.478119
#d -0.810309 0.628191 1.262556 -0.291155 -0.932978
res = df.stack()
print(res)
#a 10 0.135203
# 20 -0.508673
# 30 0.772628
# 40 -1.415804
# 50 0.973777
#b 10 -0.293076
# 20 -0.254650
# 30 2.138923
# 40 0.688851
# 50 1.413482
#c 10 0.875853
# 20 2.062340
# 30 1.347623
# 40 1.260754
# 50 -1.478119
#d 10 -0.810309
# 20 0.628191
# 30 1.262556
# 40 -0.291155
# 50 -0.932978
res= res.unstack(0)
print(res)
# a b c d
#10 0.135203 -0.293076 0.875853 -0.810309
#20 -0.508673 -0.254650 2.062340 0.628191
#30 0.772628 2.138923 1.347623 1.262556
#40 -1.415804 0.688851 1.260754 -0.291155
#50 0.973777 1.413482 -1.478119 -0.932978