pandas使用总结

0、pandas常用方法
import pandas as pd

df = pd.read_csv("chicago.csv")

df.head()   # 返回前5项内容
df.columns  # 返回数据集中的列名
df.columns.size  # 返回数据集的列数
df.describe()  # 返回数据集的统计信息,如min、max、std等
df.info()  # 返回数据集的基础信息,每一列数量统计,内存消耗、哪些列有缺失值等
df.mean()  # 返回各列的平均值

df.iloc[2:4,]  #取第二行和第三行所有数据

df['column_name'].value_counts()  # 'column_name'这个列中各个值出现的次数统计

df['column_name'].min()  # 该列中最小值

df['column_name'].max()  # 该列中最大值

df['column_name'].unique()  # 'column_name'这个列中各个数据去重后的list集合

df['column_name'].mode()[0]  # 查看这列中各数据出现次数最多的数据

df.sort_values(by=['column_name'])  # 按某一列顺序排列df表

df[df['column_name']=='xxxxx']  # 获column_name值等于xxxx的这一行的值

np.repeat(3, 4)  # array([3, 3, 3, 3])  # 重复一个numpy数据的值

red_df = red_df.rename(columns={'total_sulfur-dioxide': 'total_sulfur_dioxide'})  # 重新命名数据集的一个列名

df.drop([a, b, c], axis=1, inplace=True) # 删除数据集中的某些列a, b, c, axis=0按行操作 ,axis=1按列操作
1、计算相关性

相关性,简单讲就是:
正相关和负相关,值的大小在-1和1之间,越接近1,相关性越大

import pandas as pd
import numpy as np

filename = '/datasets/ud170/subway/nyc_subway_weather.csv'
subway_df = pd.read_csv(filename)

# 计算相关性的一个函数,类似于numpy的corrcoef()的原理
def correlation(x, y):
    std_x = (x - x.mean()) / x.std(ddof = 0)
    std_y = (y - y.mean()) / y.std(ddof = 0)
    
    return (std_x * std_y).mean()

entries = subway_df['ENTRIESn_hourly']
cum_entries = subway_df['ENTRIESn']
rain = subway_df['meanprecipi']
temp = subway_df['meantempi']

print correlation(entries, rain)
print correlation(entries, temp)
print correlation(rain, temp)

print correlation(entries, cum_entries)

# 用numpy的corrcoef()方法也是可以直接计算相关性的
print np.corrcoef(entries, rain)
2、DataForm apply()和applymap()的区别

applymap是对DataForm中的每一个单独的元素进行操作

import pandas as pd

if True:
    df = pd.DataFrame({
        'a': [1, 2, 3],
        'b': [10, 20, 30],
        'c': [5, 10, 15]
    })
    
    def add_one(x):
        return x + 1
        
    print df.applymap(add_one)
    
'''
   a   b   c
0  2  11   6
1  3  21  11
2  4  31  16
'''
    
grades_df = pd.DataFrame(
    data={'exam1': [43, 81, 78, 75, 89, 70, 91, 65, 98, 87],
          'exam2': [24, 63, 56, 56, 67, 51, 79, 46, 72, 60]},
    index=['Andre', 'Barry', 'Chris', 'Dan', 'Emilio', 
           'Fred', 'Greta', 'Humbert', 'Ivan', 'James']
)
    
def convert_grades(grades):
    if grades >= 90:
        return 'A'
    elif grades >= 80:
        return 'B'
    elif grades >= 70:
        return 'C'
    elif grades >= 60:
        return 'D'
    else:
        return 'F'

print grades_df.applymap(convert_grades)

'''
        exam1 exam2
Andre       F     F
Barry       B     D
Chris       C     F
Dan         C     F
Emilio      B     D
Fred        C     F
Greta       A     C
Humbert     D     F
Ivan        A     C
James       B     D
'''

apply()是对某一列数据进行操作

import numpy as np
import pandas as pd

df = pd.DataFrame({
    'a': [4, 5, 3, 1, 2],
    'b': [20, 10, 40, 50, 30],
    'c': [25, 20, 5, 15, 10]
})


if True:   
    print df.apply(np.mean)
    print df.apply(np.max)

'''
a     3.0
b    30.0
c    15.0
dtype: float64

a     5
b    50
c    25
dtype: int64
'''

# ascending=False表示降序排列
def second_largest_in_column(column):
    sort_column = column.sort_values(ascending=False)
    return sort_column.iloc[1]
    
def second_largest(df):
    return df.apply(second_largest_in_column)
    
second_largest(df)

'''
a     4
b    40
c    20
dtype: int64
'''

3、在jupter notebook中将数据图形化
%pylab inline
import seaborn as sns

#如果data是一个DataFrame
data.plot()
4、如何处理数据集的缺失值NaN

如果是数字,一般用这一列的平均值去填充缺失值,如下方法:

mean = df['column_name'].mean()
df['column_name'].fillna(mean, inplace=True)

# df_08.dropna()删除缺失行后的数据
# 想要得出数据集中具有缺失值的行数,可以用总行数减去删除缺失行后的数据

5、查看并删除数据集中的冗余行(即和其他行数据一模一样)
df.duplicated()     # 查看冗余行,非首次出现的冗余行标为True
df.drop_duplicates()   # 删除冗余行后的数据

# 想要得出数据集中重复的行数,可以用总行数减去删除冗余行后的数据

如果是一个比较复杂的数据,比如一家医院的患者数据集,如果只是用户ID相同,患者情况描述不同,也算是冗余,需要给duplicated和drop_duplicates方法添加参数subset

6、pandas绘图
import pandas as pd
% matplotlib inline

df = pd.read_csv('aaa.csv')

df['column_name'].hist()  # 绘制该列数据分布的直方图
# 或者如下:
df['column_name'].plot(kind='hist')

df['column_name'].value_counts.plot(kind='pie')  # 绘制该列中各个值出现次数的饼状图

df.plot(x='AT', y='PE', kind='scatter')  # 表示x轴为AT,y轴为PE时,绘制散点图

df['column_name'].plot(kind='box')  # 绘制箱线图
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容