Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7194513
  • 博文数量: 510
  • 博客积分: 12019
  • 博客等级: 上将
  • 技术积分: 6836
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-01 16:46
文章分类

全部博文(510)

文章存档

2022年(2)

2021年(6)

2020年(59)

2019年(4)

2018年(10)

2017年(5)

2016年(2)

2015年(4)

2014年(4)

2013年(16)

2012年(47)

2011年(65)

2010年(46)

2009年(34)

2008年(52)

2007年(52)

2006年(80)

2005年(22)

分类: Python/Ruby

2019-03-21 09:37:07

1、排重
#coding:utf-8
import pandas as pd
df = pd.DataFrame({'colA' : list('AABCA'), 'colB' : list('AABDA'),'colC' : [100,100,30,50,20], 'colD': [100,100,60,80,50]})
print df
df = df.drop_duplicates()#整相同
#df = df.drop_duplicates(['colB'])#指定列相同的 删除

print df

2、整体修改某列
#coding:utf-8
import pandas as pd
df = pd.DataFrame({'colA' : list('AABCA'), 'colB' : list('AABDA'),'colC' : [100,100,30,50,20], 'colD': [100,100,60,80,50]})
print df
df['colB'] = df['colB'].map(lambda x:x+"2")   #colB列后面加上2字符
print df
~
3、存文件去掉index


import pandas as pd
import numpy as np


f=open('dataset_2.csv')
df=pd.read_csv(f)
t = df.tail(10)
#t = t.reset_index()  index重置,从0开始
t.to_csv("a.csv",index=False)

4、列操作
加减乘除
var  = (DataFrame['label'] -DataFrame['close'])/DataFrame['close']

#取所有行,从第3列到第11列
 data_train = DataFrame.iloc[:,3:11].values

#取所有行,从第3列到第11列
 data_train = DataFrame.iloc[:,3:11].values


#取从第1行到第4行,只取出第3列
 data_train = DataFrame.iloc[1:4, 3, np.newaxis]

5、数据归一化处理
   normalized_train_data=(data_train-np.mean(data_train,axis=0))/np.std(data_train,axis=0)
    print normalized_train_data
                                                                                                                                       
  6、dataframe reindex和reset_index区别
reset_index的作用是重新设置dataframe的index,范围为0~len(df)。
    df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': [10, 20, 30, 40, 50]})
    df2 = pd.DataFrame({'A': [6], 'B': [60]})
    print 'df\n', df
    print 'df2\n', df2

    df_x = [df, df2]
    result = pd.concat(df_x)
    print 'first result\n', result
 
上面代码把df和df2合并为一个result,但是result的index是乱的。

df4.PNG

 
那么执行
result2= result.reset_index()

得到如下的result2: (默认只是返回一个copy,原来的result没有发生改变,所以需要副本赋值给result2)

df5.PNG

可以看到,原来的一列index现在变成了columns之一,新的index为[0,1,2,3,4,5]
如果添加参数 reset_index(drop=True) 那么原index会被丢弃,不会显示为一个新列。
result2 = result.reset_index(drop=True)
df6.PNG

 
reindex的作用是按照原有的列进行重新生成一个新的df。
 
还是使用上面的代码
result目前是df和df2的合并序列。
如下:
df7.PNG

 
可以看到index为[0,1,2,3,4,0]
执行 
result3 = result.reindex(columns=['A','C'])

df8.PNG

 
可以看到,原index并没有发生改变,而列变成了A和C,因为C是不存在的,所以使用了NaB填充,这个值的内容可以自己填充,可以改为默认填充0或者任意你想要的数据。reindex(columns=..)的作用类似于重新把列的顺序整理一遍, 而使用reindex(index=....) 则按照行重新整理一遍。

7、DataFrame数据的更改、插入新增的列和行的方法

一、更改DataFrame的某些值

1、更改DataFrame中的数据,原理是将这部分数据提取出来,重新赋值为新的数据。

2、需要注意的是,数据更改直接针对DataFrame原数据更改,操作无法撤销,如果做出更改,需要对更改条件做确认或对数据进行备份。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
import pandas as pd
df1 = pd.DataFrame([['Snow','M',22],['Tyrion','M',32],['Sansa','F',18],['Arya','F',14]], columns=['name','gender','age'])
 
print("--------更换单个值----------")
# loc和iloc 可以更换单行、单列、多行、多列的值
df1.loc[0,'age']=25   # 思路:先用loc找到要更改的值,再用赋值(=)的方法实现更换值
df1.iloc[0,2]=25     # iloc:用索引位置来查找
 
# at 、iat只能更换单个值
df1.at[0,'age']=25   # iat 用来取某个单值,参数只能用数字索引
df1.iat[0,2]=25     # at 用来取某个单值,参数只能用index和columns索引名称
print(df1)

结果图:

二、插入新增列、行

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import pandas as pd
 
df1 = pd.DataFrame([['Snow','M',22],['Tyrion','M',32],['Sansa','F',18],['Arya','F',14]], columns=['name','gender','age'])
 
print("----------在最后新增一列---------------")
print("-------案例1----------")
# 在数据框最后加上score一列,元素值分别为:80,98,67,90
df1['score']=[80,98,67,90]  # 增加列的元素个数要跟原数据列的个数一样
print(df1)
 
print("-------案例2----------")
print("---------在指定位置新增列:用insert()--------")
# 在gender后面加一列城市
# 在具体某个位置插入一列可以用insert的方法
# 语法格式:列表.insert(index, obj)
# index --->对象 obj 需要插入的索引位置。
# obj ---> 要插入列表中的对象(列名)
 
col_name=df1.columns.tolist()          # 将数据框的列名全部提取出来存放在列表里
print(col_name)
 
col_name.insert(2,'city')           # 在列索引为2的位置插入一列,列名为:city,刚插入时不会有值,整列都是NaN
df1=df1.reindex(columns=col_name)       # DataFrame.reindex() 对原行/列索引重新构建索引值
 
df1['city']=['北京','山西','湖北','澳门']  # 给city列赋值
print(df1)
 
print("----------新增行---------------")
# 重要!!先创建一个DataFrame,用来增加进数据框的最后一行
new=pd.DataFrame({'name':'lisa',
         'gender':'F',
         'city':'北京',
         'age':19,
         'score':100},
         index=[1])  # 自定义索引为:1 ,这里也可以不设置index
print(new)
 
print("-------在原数据框df1最后一行新增一行,用append方法------------")
df1=df1.append(new,ignore_index=True)  # ignore_index=True,表示不按原来的索引,从0开始自动递增
print(df1)

结果图:



         
阅读(103821) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~