pandas包

Pandas处理以下三个数据结构(值可变) -建在Numpy数组之上:

  • 系列(Series):一维,大小不变,只允许存储同类型数据
  • 数据帧(DataFrame):二维,大小可变,异构数据
  • 面板(Panel):三维,大小可变

参考:https://www.yiibai.com/pandas/python_pandas_data_structures.html

Series

相当于一维数组,可自定义索引(类似字典),默认索引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://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 ']。

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,从文件中只读取多少数据行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章