Pandas处理以下三个数据结构(值可变) -建在Numpy数组之上:
Series
):一维,大小不变,只允许存储同类型数据DataFrame
):二维,大小可变,异构数据Panel
):三维,大小可变参考:https://www.yiibai.com/pandas/python_pandas_data_structures.html
相当于一维数组,可自定义索引(类似字典),默认索引0~N-1。下标访问。
以下参考链接:https://blog.csdn.net/a346570643/article/details/79147794
from pandas import Series
obj=Series([4,7,-3])
print(obj[0]) #4
print(obj.values) #[4,7,-3]
print(obj.index) #RangeIndex(start=0, stop=3, step=1)
#自定义索引
obj=Series([1,3,-9],index=('a','b','c')) #index=可省略
print(obj['a']) #1
print(obj['a','c']) #取部分值 1 -9
print(obj['a','c']['a'])#1
print(obj[obj>0]) #只保留大于0的数 1,3
obj*2 #每个元素都X2
可用字典初始化Series
date={'name':bella,'age':18}
obj=Series(date)
print(obj['name']) #bella
state={'name'}
obj=Series(date,state) #只保留date的'name'字段
DataFrame
一个Dataframe表示一个表格,类似电子表格的数据结构,包含一个经过排序的列表集,每一个都可以有不同的类型值(数字,字符串,布尔等等)。Datarame有行和列的索引;它可以被看作是一个Series的字典(每个Series共享一个索引)。在DataFrame里的面向行和面向列的操作大致是对称的。在底层,数据是作为一个或多个二维数组存储的,而不是列表,字典,或其它一维的数组集合。
以下参考链接:https://blog.csdn.net/a346570643/article/details/79164832
from pandas import DataFrame,Series
import numpy as np
字典赋值
date={'name':['bob','bella'],'age':[13,18],'sex':['male','female']}
obj=DataFrame(date)
print(obj)
name age sex
0 bob 13 male
1 bella 18 female
obj=DataFrame(date,columns={'name','age'})#只取name,age两个字段
obj=DataFrame(date,columns={'name','height'})#date中无hieght字段仍创建height列,NA值填充
obj=DataFrame(date,columns={'name'},index=['a','b'])#可自定义行索引
嵌套字典赋值:外部键会被解释为列索引,内部键会被解释为行索引:
t={'gy':{201:4.4,200:3.3,202:5},'zl':{200:30,202:44}}
obj=DataFrame(t)
print(obj)
gy zl
200 3.3 30.0
201 4.4 NaN
202 5.0 44.0
obj['name']或者obj.name #获取列
obj.ix['a'] #获取行
obj['me']='jiu' #创建me列并赋值jiu
del obj['me'] #删除me列
obj.values 返回二维数组
通过赋值修改值
val=Series(data=['1','9'],index=['a','b'])
obj['name']=val #修改name列的值
参考:https://jingyan.baidu.com/article/a3761b2bb8292e1576f9aa09.html
import pandas as pd
import numpy as np
data=pd.read_csv("gy.csv",header=None,usecols=[0,1,2])#读取0,1,2列
data: 0 1 2
0 bob 12 male
1 bella 13 female
2 nancy 14 male
增加列
data['c']=pd.Series(np.arange(3)) #增加列
data: 0 1 2 c
0 bob 12 male 0
1 bella 13 female 1
2 nancy 14 male 2
插入列 insert(插入的列位置,列名,列内容)
data.insert(2,'e',pd.Series(np.arange(3))) #插入列 insert(插入的列位置,列名,列内容)
data: 0 1 e 2
0 bob 12 0 male
1 bella 13 1 female
2 nancy 14 2 male
永久删除列 del data[0] #删除第0列
删除列,drop,不改变原数据内容,将删除后数据存入另一个变量
df=data.drop([0,1],axis=1) #data内容不变,df存放data删除第0,1列后的数据
移动列或者是交换列
b=data.pop(1) #要移动的列的列名 此处移动第1列
data.insert(0,1,b) #将第1列移到第0列
data: 1 0 2
0 12 bob male
1 13 bella female
2 14 nancy male
以下参考:
https://www.baidu.com/link?url=dE5VUK9o7HSQe5KVhVo494VjQ2-eLQePcUwCTmB_GqfVdHEVECxmRSzAWqDReBZELdnnjHOVv9w9U3QPoQfhUK&wd=&eqid=f982d1380005e7c7000000035c98793f
https://www.baidu.com/link?url=TlJlGurKXKlp3MoABkKPk4ukLIzxNZqwNgaR4piu3UYvJKmhAo_0gHNC5LkBV6uyPX7SIGCFnWxOYtg8DrvdexA4JDjT9pzHtJg8wWT3htW&wd=&eqid=f982d1380005e7c7000000035c98793f
https://www.baidu.com/link?url=67GjK_9i_7klnCfDGsuyiVXosKhc6E4ZJOPqwQFrEPtldxlSja6A_BMzS0Eu9s_rqGDCzzhFAtD9RAVTAxd6iUHJuciTg05knPWRvS7qZcu&wd=&eqid=f3ee4ff80002dd53000000035c989b4d
pandas.read_csv():读取csv文件到DataFrame变量中。
pandas.read_csv(filepath_or_buffer, sep=', ', delimiter=None, header='infer', names=None, index_col=None, usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, iterator=False, chunksize=None, compression='infer', thousands=None, decimal=b'.', lineterminator=None, quotechar='"', quoting=0, escapechar=None, comment=None, encoding=None, dialect=None, tupleize_cols=None, error_bad_lines=True, warn_bad_lines=True, skipfooter=0, skip_footer=0, doublequote=True, delim_whitespace=False, as_recarray=None, compact_ints=None, use_unsigned=None, low_memory=True, buffer_lines=None, memory_map=False, float_precision=None)[source]
参数详解:
filepath_or_buffer : 字符串,文件路径,或者文件句柄,或者字符串IO
字符串可能是一个URL。有效的URL方案包括http、ftp、s3和file。对于文件URL,需要主机名 。例如,本地文件可以是://localhost/path/to/table.csv
sep : 字符串,分割符,默认值为‘,’
正则表达式中\s匹配任何空白字符,包括空格、制表符、换页符等等, 等价于[ \f\n\r\t\v]
\f -> 匹配一个换页
\n -> 匹配一个换行符
\r -> 匹配一个回车符
\t -> 匹配一个制表符
\v -> 匹配一个垂直制表符
而“\s+”则表示匹配任意多个上面的字符。
>>> pd.read_csv(temp_path)
1\t1.3\t1.4\t2
0 as\t3\t4\t5
>>> pd.read_csv(temp_path,sep='\s+')
1 1.3 1.4 2
0 as 3 4 5
delimiter : 同sep,默认值为 none
delim_whitespace : 布尔,默认值为 False,表示是否指定使用空格隔离符,(列如: ' '或
' '
) ,等价于 sep=' \s+'
. 如果此参数为True,隔离符参数将不发生效力
header :整数,或整数列表,指定第几行作为列名(忽略注解行),默认header=0
header可以是一个整数的列表,如[0,1,3]。未指定的中间行将被删除)。
列可以是多行,但是[2]或[1]会返回空DataFrame,另外只有单行的列才可以使用names参数。
In [25]: a = pd.read_csv('t.txt',header=[0,2])
In [26]: a #第一行被删除
Out[26]:
d open h l c
dd oo hh ll cc
0 1226 1240 1245 1237 1241
1 1227 1246 1247 1233 1239
In [31]: a = pd.read_csv('t.txt',header=[2])
In [32]: a #只取第2行
Out[32]:
Empty DataFrame
Columns: [dd, oo, hh, ll, cc]
Index: []
In [37]: a = pd.read_csv('t.txt',header=2)
In [38]: a #第2行为头,0,1行删除
Out[38]:
dd oo hh ll cc
0 1226 1240 1245 1237 1241
1 1227 1246 1247 1233 1239
In [42]: a = pd.read_csv('t.txt',header=2,names=['date','open','heigh','low','close'])
In [43]: a #第2行为头并修改列名
Out[43]:
date open heigh low close
0 1226 1240 1245 1237 1241
1 1227 1246 1247 1233 1239
names : 列名数组,当header=None时,将使用 names作为列名,如果heander指定特定行,则使用names作为替代
index_col : int or sequence or False, 默认为None 用列名作为DataFrame的行标签。如果在每一行的末尾都有一个带有分隔符的格式错误的文件,那么可以考虑使用index_col=False来强迫pandas使用默认序列作为行名称。
usecols : 默认None,返回列的一个子集。如果是数组,所有元素都必须是位置,或者是与列名称相对应的字符串,例[0,1,2]或[' foo ', ' bar ', ' baz ']。注意:usecols=[0,1]和usecols=[1,0]没有区别。
as_recarray : 默认False,从版本0.19.0后用read_csv(…).to_records()。将读入的数据按照numpy array的方式存储,返回一个NumPy recarray而不是DataFrame。如果设置为True,由于行索引在这种格式中不可用,所以index_col参数将被忽略。
squeeze : 默认 False,为True时,返回一个 Series
prefix : str, default None ,当header =None 或者没有header的时候有效,自动生成的列名编号的前缀,如: ‘X’ for X0, X1, ...
In [11]: b = pd.read_csv('t.txt',prefix='x')
In [12]: b #有header 无效
Out[12]:
dd oo hh ll cc
0 1226 1240 1245 1237 1241
1 1227 1246 1247 1233 1239
In [13]: b = pd.read_csv('t.txt',header=None,prefix='x')
In [14]: b #无header 有效 生成列名
Out[14]:
x0 x1 x2 x3 x4
0 dd oo hh ll cc
1 1226 1240 1245 1237 1241
2 1227 1246 1247 1233 1239
converters : dict, default None,设置指定列的处理函数,可以用"序号"也可以使用“列名”进行列的指定。
In [20]: b=pd.read_csv('t.txt')
In [21]: b
Out[21]:
dd oo hh ll cc
0 1226 1240 1245 1237 1241
1 1227 1246 1247 1233 1239
In [23]: def fun(x):
....: x = int(x) - 1000
....: return x
....:
In [30]: b = pd.read_csv('t.txt',converters={1:fun})
#指定行调用fun函数
In [31]: b
Out[31]:
dd oo hh ll cc
0 1226 240 1245 1237 1241
1 1227 246 1247 1233 1239
In [34]: b = pd.read_csv('t.txt',converters={'dd':fun,'ll':fun})
#制定列调用fun函数
In [35]: b
Out[35]:
dd oo hh ll cc
0 226 1240 1245 237 1241
1 227 1246 1247 233 1239
In [36]:
skipinitialspace : boolean, default False,忽略分割符后面的空格
skiprows : list-like or integer or callable, default None,忽略某几行或者从开始算起的几行
skipfooter: 忽略文件末尾处的函数,当 engine = 'c' 时此功能无效
nrows : int, default None,从文件中只读取多少数据行