**:
我們說excel好用,在處理大型資料**的時候,excel可以非常方便地進行篩選。那麼pandas是否有類似的功能呢?答案是肯定的。下面介紹的幾個操作,返回的型別都是dataframe,因此可以進行巢狀操作,非常方便。
一、選取幾列組成新的dataframe:
df = df[['a列列明', 's列列明', 'h列列明']]
二、選取某列'status'裡面元素為"active"的行,即刪掉列status元素不是active的行
df = df[df['status'] == "active"]
(單項條件搜尋,類似select all where df.status = active)
三、選取'badthing'列為元素空的行,既badthing這列有內容的行全部去掉,組成乙個新的dataframe
df = df[df['badthing'].isnull()]
(空值搜尋)
四、選取goodreason列元素為列表['quality', 'cheap']內元素的行
df = df[df['goodreason'].isin(['quality', 'cheap'])]
(多項條件搜尋,類似select all where df.goodreason= quality and cheap)
五、分組並進行遍歷,運用groupby和for:
groupbynew = df.groupby('city', sort=false)
for name, groupdata in groupbynew:
# todo …… ……
如**所示,我們可以對dataframe以某列'city'進行分組。我們如何取出某組的資料呢?當然是用
for迴圈。取出來的name即是組名,而groupdata同樣是乙個dataframe,可以進行更進一步操作。
六、對series資料進行排序:
series= series.sort_values(ascending=false) # 進行從大到小排序
高階:關於groupby的一些資訊:
在進行groupby運算後,直接列印會得乙個object資訊,新增groups引數後
print df.groupby(by=['city']).groups
列印出來會是帶group標籤和原資料行標籤(也就是原來dataframe裡面對應行的index)的組合資訊:
{'beijing': [25998l, 26134l, 26135l, 26235l, 26340l], 'shanghai': [33370l, 33426l, 33541l], 'chengdu': [26153l]
我們可以看到,按照groups來print,得出city為北京的情況下,對應原來的行標籤第25998行、26134行等
即使指定了某列:
print df.groupby(by=['city'])['quantity'].groups
依然會得出相同的結果:
{'beijing': [25998l, 26134l, 26135l, 26235l, 26340l], 'shanghai': [33370l, 33426l, 33541l], 'chengdu': [26153l]
print df.groupby(by=['city'])['quantity'].sum()
這樣就可以成功轉換成dataframe了:
city
beijing 5
shanghai 207
chengdu 518 ……
彙總說明如下:
print '----------new------------\n', type(df.groupby(by=['city']))
print '----------new------------\n', type(df.groupby(by=['city']).sum())
print '----------new------------\n', type(df.groupby(by=['city'])['quantity'])
print '----------new------------\n', type(df.groupby(by=['city'])['quantity'].sum())
所得結果為:
----------new------------
----------new------------
----------new------------
----------new------------
說明:乙個dataframe經過groupby以後得到的型別是pandas.core.groupby.dataframegroupby。而用for in迴圈取出的每個項的型別是pandas.core.frame.dataframe
乙個dataframe經過groupby再進行sum以後仍然是dataframe(不過具體通過那一列來sum有待考證)
乙個dataframe經過groupby以後再進行列選取,得到的是pandas.core.groupby.seriesgroupby型別。可知用for in迴圈取出的是pandas.core.series.series
乙個series經過groupby再進行sum以後仍然是series
DataFrame按多個條件刪除行
data.drop index data data 公司縮寫 row 1 data 發布時間 row 2 data 文章綜合情感 row 3 index for row in merge data12.itertuples 迴圈titledata每一行 a row 1 split print mer...
按概率隨機選取
據我了解,random.choice seq 是等概率選取乙個,不是我想要的。而numpy.random.choice seq,p,k 是按概率隨機重複選取多個,這正是我想要的。但是,我不想為這麼乙個函式引入巨大的numpy庫,所以打算自己實現乙個按概率隨機選取的函式。特此將 記錄如下 import...
按概率隨機選取
據我了解,random.choice seq 是等概率選取乙個,不是我想要的。而numpy.random.choice seq,p,k 是按概率隨機重複選取多個,這正是我想要的。但是,我不想為這麼乙個函式引入巨大的numpy庫,所以打算自己實現乙個按概率隨機選取的函式。特此將 記錄如下 import...