python读取

目录

用DataFrame对象.to_csv()方法来保存数据成csv文件

参数:

pd.read_csv()方法来读取csv文件

read_csv中的基本参数

python使用pandas读xlsx文件

1.读取前n行数据

2.读取指定数据(指定行指定列)

3.获取文件行号和列标题

4.将数据转换为字典形式

5.iloc和loc的区别:

python 删除特定列_pandas删除某一列

Python3 df.loc和df.iloc函数用法及提取指定行列位置处数值

Data Frame. loc

根据行列名去提取数值 

提取某些行

提取某些列

DataFrame.iloc

根据行列号提取数值

提取某些行

提取某些列

Python中的index()方法

List 列表中使用 .index()

1.1 介绍

1.2 参数介绍

1.3 示例

对字符串str 使用 .index()

index()功能: 

index()语法:

代码:

当要在列表中查找某个元素并输出对应的索引值(位置),

这时就需要使用到index()方法

代码:

 rindex() 方法 

Python Pandas DataFrame取列

1.取一列

2.取多列

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可选参数。

  1. 如果手动设定为True(默认为False),那么原数组直接就被替换。
  2. 也就是说,采用inplace=True之后,原数组名对应的内存值直接改变;
  3. 而采用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

  1. 主要是由字符串作为标签获取,有时也可用布尔型去获取。
  2. df.loc主要是依赖于行列的index字符串名,去索取指定行列位置处的值。
  3. 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

由行列号去获取,

如果获取指定行列号处的值,

  1. 而表中又没有行列名使用,
  2. 或者只有列名,没有行名(大多数情况下),

那么推荐使用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

你可能感兴趣的:(python,开发语言)