pandas中DataFrame相关

Posted lzhc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pandas中DataFrame相关相关的知识,希望对你有一定的参考价值。

1.创建

1.1  标准格式创建

 DataFrame创建方法有很多,常用基本格式是:DataFrame 构造器参数:DataFrame(data=[],index=[],coloumns=[])

In [272]: df2=DataFrame(np.arange(16).reshape((4,4)),index=[a,b,c,d],columns=[one,two,three,four])  
  
In [273]: df2  
Out[273]:   
   one  two  three  four  
a    0    1      2     3  
b    4    5      6     7  
c    8    9     10    11  
d   12   13     14    15  

1.2 用传入等长列表组成的字典来创建

In [204]: data={c:[1,2],a:[5]}  #创建不等长字典序列  
  
In [205]: data  
Out[205]: {a: [5], c: [1, 2]}  
  
In [206]: df=DataFrame(data)  
Traceback (most recent call last):  
...  
  
ValueError: arrays must all be same length   # 报错,传入的数组必须等长  
  
In [207]: data={c:[1,2],a:[5,6]}  #创建<strong>等长字典序列  
In [208]: df=DataFrame(data)  
  
In [209]: df  
Out[209]:   
   a  c                      # 创建完成后‘a‘,‘c‘自动按照字典序排序,并且创建时自定加上索引  
0  5  1  
1  6  2  

创建完成后‘a‘,‘c‘自动按照字典序排序,并且创建时自定加上索引

In [210]: df=DataFrame(data,columns=[c,a])  
  
In [211]: df  
Out[211]:   
   c  a    #按照指定顺序创建。  
0  1  5  
1  2  6  

1.3 传入嵌套字典(字典的值也是字典)创建DataFrame

如果指定了columns名称,则会按照指定顺序创建。

In [227]: nest_dict={shanghai:{2015:100,2016:101},beijing:{2015:102,2016:103}}  
  
In [228]: nest_dict  
Out[228]: {beijing: {2015: 102, 2016: 103}, shanghai: {2015: 100, 2016: 101}}  
  
In [229]: df1=DataFrame(nest_dict)  
  
In [230]: df1  
Out[230]:   
      beijing  shanghai  
2015      102       100  
2016      103       101  

2.增删改查

2.1 增

创建新列

df[b]=1  
l = [1,2,3]
df[‘c‘]=l

添加新行

将列表中的数据添加到dataframe中

df = pd.DataFrame(columns=[u设备号, u节目, u类型, u完整度, u调整系数, u喜爱度])
new = pd.DataFrame([info], columns=[u设备号, u节目, u类型, u完整度, u调整系数, u喜爱度])
# 忽略索引,往dataframe中插入一行数据
df = df.append(new, ignore_index=True)

将数据字典添加到dataframe中

df = pd.DataFrame(columns=[u设备号, u节目, u类型, u完整度, u调整系数, u喜爱度])
new = pd.DataFrame(dict, ,index=["0"])
# 忽略索引,往dataframe中插入一行数据
df = df.append(new, ignore_index=True)

数据合并与重塑

https://blog.csdn.net/stevenkwong/article/details/52528616

2.2 删

用del删除

In [225]: del df[a]  
  
In [226]: df  
Out[226]:   
   c  b  
0  1  1  
1  2  1  
用drop() 删除
用drop删除时,删的是视图,并没有真正删除
In [258]: df  
Out[258]:   
   c  b  0  
0  5  1  6  
1  5  1  6  
In [259]: df.drop(0,axis=1) #删除列Out[259]:     
   c  b  
0  5  1  
1  5  1  
In [260]: df  # df的数据并没有改动  
Out[260]:     
   c  b  0  
0  5  1  6  
1  5  1  6  

dorp()可以通过axis(行:axis=0 ,列:axis=1)可以控制删除行或列,默认是行。

dorp()也可以同时删除多行或多列

In [271]: df.drop([0,1],axis=1)  
Out[271]:   
   c  b  
0  6  6  
1  5  1  

2.3 改

通过赋值进行修改,可以通过定位到行,列,或者具体位置进行赋值修改。
修改具体元素值:
In [242]: df[c][1]=4  
  
In [243]: df  
Out[243]:   
   c  b  
0  1  1  
1  4  1  

修改列:

In [244]: df[c]=5   
  
In [245]: df  
Out[245]:   
   c  b  
0  5  1  
1  5  1  

修改行:

df[:1]=6  
  
df  
Out[266]:   
   c  b  
0  6  6  
1  5  1  

修改行和列如果传入一组值得话,注意传入数组的长度,如果传入数组长度大于len(df) 则截断,小于df长度则置NaN

In [267]: df[0]=Series([1,2,3])  
  
In [268]: df  
Out[268]:   
   c  b  0  
0  6  6  1  
1  5  1  2  
  
In [269]: df[1]=Series([1,])  #增加一列,传入一个值  
  
In [270]: df  
Out[270]:   
   c  b  0   1  
0  6  6  1   1  
1  5  1  2 NaN  

2.4 查

df[0:1] 选取第一行 按位置选取的 df[0] 这样是错误的的 
df[‘a’] 选取第a列 按列名选取

df.loc[0] 按index选取行 df.loc[0:3]选取0,1,2行 df.loc[‘A’] 选取索引为A的行 
df.loc[[‘A’],’a’] 行列一起选

df.iloc[0,2] 只能通过位置来选择,选择第一行第三列 
df.iloc[0:3,1:3]通过位置切片来选择 可以选多的,也可以选中一个元素

df.at[1,’a’]通过名称来选择,只能选中一个 
df.iat[1,2]通过位置来选择 只能选中一个

df.ix[1] 通过位置来选取行 df.ix[‘A’]通过索引选择行 
df.ix[1,’a’] 同时选取行列,位置和索引都可以 可选中一个元素,也可以是多个

df选择后的数据基本都是dataframe结构,不能直接使用 
使用df.values可以获取它的值

df.columns 输出列的信息

df.index 输出索引相关信息

df.describe() 会显示每一列的总数均值等 

df.info() 显示基本的数据信息 
df.count() df.mean() df.max() df.min() 统计每一列的统计量 
df.head(10) 输出前10行 df.tail(10) 输出最后10行

df.isnull.sum() 按列统计表中的空值的数量 
df.where(df>10).count() 按列统计 表中大于10的元素个数 
df.groupby(‘y’).count() 根据y属性进行分组,统计每一组的分布情况

df[df[‘price’]<’7.2’] 把符合条件的行显示出来 
df.where(df[‘price’]<’7.2’) 所有行都显示,不符合条件的price显示为nan














以上是关于pandas中DataFrame相关的主要内容,如果未能解决你的问题,请参考以下文章

AJAX相关JS代码片段和部分浏览器模型

如何优化C ++代码的以下片段 - 卷中的零交叉

C++ 解释器/控制台/片段编译器

c_cpp 这个简单的代码片段显示了如何使用有符号整数在C中完成插值。 for()循环确定要插入的范围

latex在vim中的代码片段

C 中的共享内存代码片段