0次洼、pandas常用方法
import pandas as pd
df = pd.read_csv("chicago.csv")
df.head() # 返回前5項(xiàng)內(nèi)容
df.columns # 返回?cái)?shù)據(jù)集中的列名
df.columns.size # 返回?cái)?shù)據(jù)集的列數(shù)
df.describe() # 返回?cái)?shù)據(jù)集的統(tǒng)計(jì)信息关贵,如min遇骑、max卖毁、std等
df.info() # 返回?cái)?shù)據(jù)集的基礎(chǔ)信息,每一列數(shù)量統(tǒng)計(jì)落萎,內(nèi)存消耗亥啦、哪些列有缺失值等
df.mean() # 返回各列的平均值
df.iloc[2:4,] #取第二行和第三行所有數(shù)據(jù)
df['column_name'].value_counts() # 'column_name'這個(gè)列中各個(gè)值出現(xiàn)的次數(shù)統(tǒng)計(jì)
df['column_name'].min() # 該列中最小值
df['column_name'].max() # 該列中最大值
df['column_name'].unique() # 'column_name'這個(gè)列中各個(gè)數(shù)據(jù)去重后的list集合
df['column_name'].mode()[0] # 查看這列中各數(shù)據(jù)出現(xiàn)次數(shù)最多的數(shù)據(jù)
df.sort_values(by=['column_name']) # 按某一列順序排列df表
df[df['column_name']=='xxxxx'] # 獲column_name值等于xxxx的這一行的值
np.repeat(3, 4) # array([3, 3, 3, 3]) # 重復(fù)一個(gè)numpy數(shù)據(jù)的值
red_df = red_df.rename(columns={'total_sulfur-dioxide': 'total_sulfur_dioxide'}) # 重新命名數(shù)據(jù)集的一個(gè)列名
df.drop([a, b, c], axis=1, inplace=True) # 刪除數(shù)據(jù)集中的某些列a, b, c, axis=0按行操作 ,axis=1按列操作
1练链、計(jì)算相關(guān)性
相關(guān)性,簡(jiǎn)單講就是:
正相關(guān)和負(fù)相關(guān)错妖,值的大小在-1和1之間疚沐,越接近1暂氯,相關(guān)性越大
import pandas as pd
import numpy as np
filename = '/datasets/ud170/subway/nyc_subway_weather.csv'
subway_df = pd.read_csv(filename)
# 計(jì)算相關(guān)性的一個(gè)函數(shù),類似于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()方法也是可以直接計(jì)算相關(guān)性的
print np.corrcoef(entries, rain)
2亮蛔、DataForm apply()和applymap()的區(qū)別
applymap是對(duì)DataForm中的每一個(gè)單獨(dú)的元素進(jìn)行操作
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()是對(duì)某一列數(shù)據(jù)進(jìn)行操作
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中將數(shù)據(jù)圖形化
%pylab inline
import seaborn as sns
#如果data是一個(gè)DataFrame
data.plot()
4、如何處理數(shù)據(jù)集的缺失值NaN
如果是數(shù)字究流,一般用這一列的平均值去填充缺失值辣吃,如下方法:
mean = df['column_name'].mean()
df['column_name'].fillna(mean, inplace=True)
# df_08.dropna()刪除缺失行后的數(shù)據(jù)
# 想要得出數(shù)據(jù)集中具有缺失值的行數(shù)神得,可以用總行數(shù)減去刪除缺失行后的數(shù)據(jù)
5、查看并刪除數(shù)據(jù)集中的冗余行(即和其他行數(shù)據(jù)一模一樣)
df.duplicated() # 查看冗余行灯节,非首次出現(xiàn)的冗余行標(biāo)為True
df.drop_duplicates() # 刪除冗余行后的數(shù)據(jù)
# 想要得出數(shù)據(jù)集中重復(fù)的行數(shù)循头,可以用總行數(shù)減去刪除冗余行后的數(shù)據(jù)
如果是一個(gè)比較復(fù)雜的數(shù)據(jù),比如一家醫(yī)院的患者數(shù)據(jù)集炎疆,如果只是用戶ID相同全跨,患者情況描述不同,也算是冗余亿遂,需要給duplicated和drop_duplicates方法添加參數(shù)subset
6浓若、pandas繪圖
import pandas as pd
% matplotlib inline
df = pd.read_csv('aaa.csv')
df['column_name'].hist() # 繪制該列數(shù)據(jù)分布的直方圖
# 或者如下:
df['column_name'].plot(kind='hist')
df['column_name'].value_counts.plot(kind='pie') # 繪制該列中各個(gè)值出現(xiàn)次數(shù)的餅狀圖
df.plot(x='AT', y='PE', kind='scatter') # 表示x軸為AT,y軸為PE時(shí)蛇数,繪制散點(diǎn)圖
df['column_name'].plot(kind='box') # 繪制箱線圖