带你玩转Pandas
基本操作進階操作Series 和 Datetime索引數據清洗層次化索引可視化
基本操作
導入 Pandas 庫并簡寫為 pd,并輸出版本號
2.從列表創建 Series
arr?=?[0,?1,?2,?3,?4] df?=?pd.Series(arr)?#?如果不指定索引,則默認從?0?開始 df 0????0 1????1 2????2 3????3 4????4 dtype:?int643.從字典創建 Series
d?=?{'a':1,'b':2,'c':3,'d':4,'e':5} df?=?pd.Series(d) df a????1 b????2 c????3 d????4 e????5 dtype:?int644.從 NumPy 數組創建 DataFrame
dates?=?pd.date_range('today',periods=6)?#?定義時間序列作為?index num_arr?=?np.random.randn(6,4)?#?傳入?numpy?隨機數組 columns?=?['A','B','C','D']?#?將列表作為列名 df1?=?pd.DataFrame(num_arr,?index?=?dates,?columns?=?columns) df1| 0.560268 | -0.559426 | 1.176857 | 0.885549 |
| 2.396094 | -0.720063 | -1.144393 | -0.149686 |
| 0.036016 | -1.032553 | 0.526661 | 0.524164 |
| 0.120952 | -0.495401 | -0.006828 | -2.375663 |
| 1.125484 | 0.685709 | -0.144614 | -0.398538 |
| -0.027859 | 0.331943 | -1.256073 | -0.659318 |
5.從CSV中創建 DataFrame,分隔符為;,編碼格式為gbk
#?df?=?pd.read_csv('test.csv',?encoding='gbk,?sep=';')6.從字典對象data創建DataFrame,設置索引為labels
import?numpy?as?npdata?=?{'animal':?['cat',?'cat',?'snake',?'dog',?'dog',?'cat',?'snake',?'cat',?'dog',?'dog'],'age':?[2.5,?3,?0.5,?np.nan,?5,?2,?4.5,?np.nan,?7,?3],'visits':?[1,?3,?2,?3,?2,?3,?1,?1,?2,?1],'priority':?['yes',?'yes',?'no',?'yes',?'no',?'no',?'no',?'yes',?'no',?'no']}labels?=?['a',?'b',?'c',?'d',?'e',?'f',?'g',?'h',?'i',?'j'] df?=?pd.DataFrame(data,?index=labels) df| cat | 2.5 | 1 | yes |
| cat | 3.0 | 3 | yes |
| snake | 0.5 | 2 | no |
| dog | NaN | 3 | yes |
| dog | 5.0 | 2 | no |
| cat | 2.0 | 3 | no |
| snake | 4.5 | 1 | no |
| cat | NaN | 1 | yes |
| dog | 7.0 | 2 | no |
| dog | 3.0 | 1 | no |
7.顯示DataFrame的基礎信息,包括行的數量;列名;每一列值的數量、類型
df.info() #?方法二 #?df.describe() <class?'pandas.core.frame.DataFrame'> Index:?10?entries,?a?to?j Data?columns?(total?4?columns): animal??????10?non-null?object age?????????8?non-null?float64 visits??????10?non-null?int64 priority????10?non-null?object dtypes:?float64(1),?int64(1),?object(2) memory?usage:?400.0+?bytes8.展示df的前3行
df.iloc[:3] #?方法二 #df.head(3)| cat | 2.5 | 1 | yes |
| cat | 3.0 | 3 | yes |
| snake | 0.5 | 2 | no |
9.取出df的animal和age列
df.loc[:,?['animal',?'age']] #?方法二 #?df[['animal',?'age']]| cat | 2.5 |
| cat | 3.0 |
| snake | 0.5 |
| dog | NaN |
| dog | 5.0 |
| cat | 2.0 |
| snake | 4.5 |
| cat | NaN |
| dog | 7.0 |
| dog | 3.0 |
10.取出索引為[3, 4, 8]行的animal和age列
df.loc[df.index[[3,?4,?8]],?['animal',?'age']]| dog | NaN |
| dog | 5.0 |
| dog | 7.0 |
11.取出age值大于3的行
df[df['age']?>?3]| dog | 5.0 | 2 | no |
| snake | 4.5 | 1 | no |
| dog | 7.0 | 2 | no |
12.取出age值缺失的行
df[df['age'].isnull()]| dog | NaN | 3 | yes |
| cat | NaN | 1 | yes |
13.取出age在2,4間的行(不含)
df[(df['age']>2)?&?(df['age']>4)] #?方法二 #df[df['age'].between(2,?4)]| dog | 5.0 | 2 | no |
| snake | 4.5 | 1 | no |
| dog | 7.0 | 2 | no |
14.f行的age改為1.5
df.loc['f',?'age']?=?1.515.計算visits的總和
df['visits'].sum() 1916.計算每個不同種類animal的age的平均數
df.groupby('animal')['age'].mean() animal cat??????2.333333 dog??????5.000000 snake????2.500000 Name:?age,?dtype:?float6417.計算df中每個種類animal的數量
df['animal'].value_counts() cat??????4 dog??????4 snake????2 Name:?animal,?dtype:?int6418.先按age降序排列,后按visits升序排列
df.sort_values(by=['age',?'visits'],?ascending=[False,?True])| dog | 7.0 | 2 | no |
| dog | 5.0 | 2 | no |
| snake | 4.5 | 1 | no |
| dog | 3.0 | 1 | no |
| cat | 3.0 | 3 | yes |
| cat | 2.5 | 1 | yes |
| cat | 1.5 | 3 | no |
| snake | 0.5 | 2 | no |
| cat | NaN | 1 | yes |
| dog | NaN | 3 | yes |
19.將priority列中的yes, no替換為布爾值True, False
df['priority']?=?df['priority'].map({'yes':?True,?'no':?False}) df| cat | 2.5 | 1 | True |
| cat | 3.0 | 3 | True |
| snake | 0.5 | 2 | False |
| dog | NaN | 3 | True |
| dog | 5.0 | 2 | False |
| cat | 1.5 | 3 | False |
| snake | 4.5 | 1 | False |
| cat | NaN | 1 | True |
| dog | 7.0 | 2 | False |
| dog | 3.0 | 1 | False |
20.將animal列中的snake替換為python
df['animal']?=?df['animal'].replace('snake',?'python') df| cat | 2.5 | 1 | True |
| cat | 3.0 | 3 | True |
| python | 0.5 | 2 | False |
| dog | NaN | 3 | True |
| dog | 5.0 | 2 | False |
| cat | 1.5 | 3 | False |
| python | 4.5 | 1 | False |
| cat | NaN | 1 | True |
| dog | 7.0 | 2 | False |
| dog | 3.0 | 1 | False |
21.對每種animal的每種不同數量visits,計算平均age,即,返回一個表格,行是aniaml種類,列是visits數量,表格值是行動物種類列訪客數量的平均年齡
df.dtypes animal???????object age?????????float64 visits???????object priority??????int64 dtype:?object df.age=df.age.astype(float) df.pivot_table(index='animal',?columns='visits',?values='age',?aggfunc='mean')| 2.5 | NaN | 2.25 |
| 3.0 | 6.0 | NaN |
| 4.5 | 0.5 | NaN |
22.在df中插入新行k,然后刪除該行
#插入 df.loc['k']?=?[5.5,?'dog',?'no',?2] #?刪除 df?=?df.drop('k') df| cat | 2.5 | 1 | 1 |
| cat | 3 | 3 | 1 |
| python | 0.5 | 2 | 0 |
| dog | NaN | 3 | 1 |
| dog | 5 | 2 | 0 |
| cat | 1.5 | 3 | 0 |
| python | 4.5 | 1 | 0 |
| cat | NaN | 1 | 1 |
| dog | 7 | 2 | 0 |
| dog | 3 | 1 | 0 |
進階操作
23.有一列整數列A的DatraFrame,刪除數值重復的行
df?=?pd.DataFrame({'A':?[1,?2,?2,?3,?4,?5,?5,?5,?6,?7,?7]}) print(df) df1?=?df.loc[df['A'].shift()?!=?df['A']] #?方法二 #?df1?=?df.drop_duplicates(subset='A') print(df1) ????A 0???1 1???2 2???2 3???3 4???4 5???5 6???5 7???5 8???6 9???7 10??7A 0??1 1??2 3??3 4??4 5??5 8??6 9??724.一個全數值DatraFrame,每個數字減去該行的平均數
df?=?pd.DataFrame(np.random.random(size=(5,?3))) print(df) df1?=?df.sub(df.mean(axis=1),?axis=0) print(df1) ??????????0?????????1?????????2 0??0.761859??0.579139??0.023214 1??0.520961??0.847583??0.044559 2??0.186740??0.561425??0.158097 3??0.606828??0.680284??0.903810 4??0.474712??0.404921??0.7765030?????????1?????????2 0??0.307122??0.124402?-0.431524 1??0.049927??0.376549?-0.426476 2?-0.115347??0.259337?-0.143990 3?-0.123479?-0.050023??0.173503 4?-0.077333?-0.147124??0.22445725.一個有5列的DataFrame,求哪一列的和最小
df?=?pd.DataFrame(np.random.random(size=(5,?5)),?columns=list('abcde')) print(df) df.sum().idxmin() ??????????a?????????b?????????c?????????d?????????e 0??0.832332??0.947136??0.614947??0.162827??0.621645 1??0.786207??0.974123??0.675870??0.633438??0.960480 2??0.141939??0.070910??0.963475??0.055656??0.293488 3??0.279569??0.690073??0.570594??0.680619??0.706241 4??0.237010??0.145196??0.295304??0.628794??0.924545'd'26.給定DataFrame,求A列每個值的前3大的B的和
df?=?pd.DataFrame({'A':?list('aaabbcaabcccbbc'),?'B':?[12,345,3,1,45,14,4,52,54,23,235,21,57,3,87]}) print(df) df1?=?df.groupby('A')['B'].nlargest(3).sum(level=0) print(df1) ????A????B 0???a???12 1???a??345 2???a????3 3???b????1 4???b???45 5???c???14 6???a????4 7???a???52 8???b???54 9???c???23 10??c??235 11??c???21 12??b???57 13??b????3 14??c???87 A a????409 b????156 c????345 Name:?B,?dtype:?int6427.給定DataFrame,有列A, B,A的值在1-100(含),對A列每10步長,求對應的B的和
df?=?pd.DataFrame({'A':?[1,2,11,11,33,34,35,40,79,99],?'B':?[1,2,11,11,33,34,35,40,79,99]}) print(df) df1?=?df.groupby(pd.cut(df['A'],?np.arange(0,?101,?10)))['B'].sum() print(df1) ????A???B 0???1???1 1???2???2 2??11??11 3??11??11 4??33??33 5??34??34 6??35??35 7??40??40 8??79??79 9??99??99 A (0,?10]????????3 (10,?20]??????22 (20,?30]???????0 (30,?40]?????142 (40,?50]???????0 (50,?60]???????0 (60,?70]???????0 (70,?80]??????79 (80,?90]???????0 (90,?100]?????99 Name:?B,?dtype:?int6428.給定DataFrame,計算每個元素至左邊最近的0(或者至開頭)的距離,生成新列y
df?=?pd.DataFrame({'X':?[7,?2,?0,?3,?4,?2,?5,?0,?3,?4]})izero?=?np.r_[-1,?(df['X']?==?0).to_numpy().nonzero()[0]]?#?標記0的位置 idx?=?np.arange(len(df)) df['Y']?=?idx?-?izero[np.searchsorted(izero?-?1,?idx)?-?1] print(df)#?方法二 #?x?=?(df['X']?!=?0).cumsum() #?y?=?x?!=?x.shift() #?df['Y']?=?y.groupby((y?!=?y.shift()).cumsum()).cumsum()#?方法三 #?df['Y']?=?df.groupby((df['X']?==?0).cumsum()).cumcount() #first_zero_idx?=?(df['X']?==?0).idxmax() #?df['Y'].iloc[0:first_zero_idx]?+=?1 ???X??Y 0??7??1 1??2??2 2??0??0 3??3??1 4??4??2 5??2??3 6??5??4 7??0??0 8??3??1 9??4??229.一個全數值的DataFrame,返回最大3值的坐標
df?=?pd.DataFrame(np.random.random(size=(5,?3))) print(df) df.unstack().sort_values()[-3:].index.tolist() ??????????0?????????1?????????2 0??0.322047??0.508559??0.481098 1??0.625304??0.582052??0.048630 2??0.848465??0.662735??0.038410 3??0.573324??0.664073??0.606389 4??0.920799??0.462395??0.684100[(2,?4),?(0,?2),?(0,?4)]30.給定DataFrame,將負值代替為同組的平均值
df?=?pd.DataFrame({'grps':?list('aaabbcaabcccbbc'),?'vals':?[-12,345,3,1,45,14,4,-52,54,23,-235,21,57,3,87]}) print(df)def?replace(group):mask?=?group<0group[mask]?=?group[~mask].mean()return?groupdf['vals']?=?df.groupby(['grps'])['vals'].transform(replace) print(df) ???grps??vals 0?????a???-12 1?????a???345 2?????a?????3 3?????b?????1 4?????b????45 5?????c????14 6?????a?????4 7?????a???-52 8?????b????54 9?????c????23 10????c??-235 11????c????21 12????b????57 13????b?????3 14????c????87grps????????vals 0?????a??117.333333 1?????a??345.000000 2?????a????3.000000 3?????b????1.000000 4?????b???45.000000 5?????c???14.000000 6?????a????4.000000 7?????a??117.333333 8?????b???54.000000 9?????c???23.000000 10????c???36.250000 11????c???21.000000 12????b???57.000000 13????b????3.000000 14????c???87.00000031.計算3位滑動窗口的平均值,忽略NAN
df?=?pd.DataFrame({'group':?list('aabbabbbabab'),'value':?[1,?2,?3,?np.nan,?2,?3,?np.nan,?1,?7,?3,?np.nan,?8]}) print(df)g1?=?df.groupby(['group'])['value'] g2?=?df.fillna(0).groupby(['group'])['value']?s?=?g2.rolling(3,?min_periods=1).sum()?/?g1.rolling(3,?min_periods=1).count()s.reset_index(level=0,?drop=True).sort_index()? ???group??value 0??????a????1.0 1??????a????2.0 2??????b????3.0 3??????b????NaN 4??????a????2.0 5??????b????3.0 6??????b????NaN 7??????b????1.0 8??????a????7.0 9??????b????3.0 10?????a????NaN 11?????b????8.00?????1.000000 1?????1.500000 2?????3.000000 3?????3.000000 4?????1.666667 5?????3.000000 6?????3.000000 7?????2.000000 8?????3.666667 9?????2.000000 10????4.500000 11????4.000000 Name:?value,?dtype:?float64Series 和 Datetime索引
32.創建Series s,將2015所有工作日作為隨機值的索引
dti?=?pd.date_range(start='2015-01-01',?end='2015-12-31',?freq='B')? s?=?pd.Series(np.random.rand(len(dti)),?index=dti)s.head(10) 2015-01-01????0.542640 2015-01-02????0.843010 2015-01-05????0.335675 2015-01-06????0.823544 2015-01-07????0.416880 2015-01-08????0.587211 2015-01-09????0.805899 2015-01-12????0.824835 2015-01-13????0.639243 2015-01-14????0.406859 Freq:?B,?dtype:?float6433.所有禮拜三的值求和
s[s.index.weekday?==?2].sum()? 24.08565657415689634.求每個自然月的平均數
s.resample('M').mean() 2015-01-31????0.507893 2015-02-28????0.589465 2015-03-31????0.622884 2015-04-30????0.559272 2015-05-31????0.568332 2015-06-30????0.469618 2015-07-31????0.396087 2015-08-31????0.409175 2015-09-30????0.521630 2015-10-31????0.558678 2015-11-30????0.497789 2015-12-31????0.460043 Freq:?M,?dtype:?float6435.每連續4個月為一組,求最大值所在的日期
s.groupby(pd.Grouper(freq='4M')).idxmax() 2015-01-31???2015-01-02 2015-05-31???2015-03-25 2015-09-30???2015-06-09 2016-01-31???2015-10-01 Freq:?4M,?dtype:?datetime64[ns]36.創建2015-2016每月第三個星期四的序列
pd.date_range('2015-01-01',?'2016-12-31',?freq='WOM-3THU') DatetimeIndex(['2015-01-15',?'2015-02-19',?'2015-03-19',?'2015-04-16','2015-05-21',?'2015-06-18',?'2015-07-16',?'2015-08-20','2015-09-17',?'2015-10-15',?'2015-11-19',?'2015-12-17','2016-01-21',?'2016-02-18',?'2016-03-17',?'2016-04-21','2016-05-19',?'2016-06-16',?'2016-07-21',?'2016-08-18','2016-09-15',?'2016-10-20',?'2016-11-17',?'2016-12-15'],dtype='datetime64[ns]',?freq='WOM-3THU')數據清洗
df?=?pd.DataFrame({'From_To':?['LoNDon_paris',?'MAdrid_miLAN',?'londON_StockhOlm',?'Budapest_PaRis',?'Brussels_londOn'],'FlightNumber':?[10045,?np.nan,?10065,?np.nan,?10085],'RecentDelays':?[[23,?47],?[],?[24,?43,?87],?[13],?[67,?32]],'Airline':?['KLM(!)',?'<Air?France>?(12)',?'(British?Airways.?)',?'12.?Air?France',?'"Swiss?Air"']}) df| LoNDon_paris | 10045.0 | [23, 47] | KLM(!) |
| MAdrid_miLAN | NaN | [] | <Air France> (12) |
| londON_StockhOlm | 10065.0 | [24, 43, 87] | (British Airways. ) |
| Budapest_PaRis | NaN | [13] | 12. Air France |
| Brussels_londOn | 10085.0 | [67, 32] | "Swiss Air" |
37.FlightNumber列中有些值缺失了,他們本來應該是每一行增加10,填充缺失的數值,并且令數據類型為整數
df['FlightNumber']?=?df['FlightNumber'].interpolate().astype(int) df| LoNDon_paris | 10045 | [23, 47] | KLM(!) |
| MAdrid_miLAN | 10055 | [] | <Air France> (12) |
| londON_StockhOlm | 10065 | [24, 43, 87] | (British Airways. ) |
| Budapest_PaRis | 10075 | [13] | 12. Air France |
| Brussels_londOn | 10085 | [67, 32] | "Swiss Air" |
38.將From_To列從_分開,分成From, To兩列,并刪除原始列
temp?=?df.From_To.str.split('_',?expand=True) temp.columns?=?['From',?'To'] df?=?df.join(temp) df?=?df.drop('From_To',?axis=1) df| 10045 | [23, 47] | KLM(!) | LoNDon | paris |
| 10055 | [] | <Air France> (12) | MAdrid | miLAN |
| 10065 | [24, 43, 87] | (British Airways. ) | londON | StockhOlm |
| 10075 | [13] | 12. Air France | Budapest | PaRis |
| 10085 | [67, 32] | "Swiss Air" | Brussels | londOn |
39.將From, To大小寫統一
df['From']?=?df['From'].str.capitalize() df['To']?=?df['To'].str.capitalize() df| 10045 | [23, 47] | KLM(!) | London | Paris |
| 10055 | [] | <Air France> (12) | Madrid | Milan |
| 10065 | [24, 43, 87] | (British Airways. ) | London | Stockholm |
| 10075 | [13] | 12. Air France | Budapest | Paris |
| 10085 | [67, 32] | "Swiss Air" | Brussels | London |
40.Airline列,有一些多余的標點符號,需要提取出正確的航司名稱。舉例:'(British Airways. )' 應該改為 'British Airways'.
df['Airline']?=?df['Airline'].str.extract('([a-zA-Z\s]+)',?expand=False).str.strip() df| 10045 | [23, 47] | KLM | London | Paris |
| 10055 | [] | Air France | Madrid | Milan |
| 10065 | [24, 43, 87] | British Airways | London | Stockholm |
| 10075 | [13] | Air France | Budapest | Paris |
| 10085 | [67, 32] | Swiss Air | Brussels | London |
41.Airline列,數據被以列表的形式錄入,但是我們希望每個數字被錄入成單獨一列,delay_1, delay_2, ...沒有的用NAN替代。
delays?=?df['RecentDelays'].apply(pd.Series) delays.columns?=?['delay_{}'.format(n)?for?n?in?range(1,?len(delays.columns)+1)] df?=?df.drop('RecentDelays',?axis=1).join(delays)df| 10045 | KLM | London | Paris | 23.0 | 47.0 | NaN |
| 10055 | Air France | Madrid | Milan | NaN | NaN | NaN |
| 10065 | British Airways | London | Stockholm | 24.0 | 43.0 | 87.0 |
| 10075 | Air France | Budapest | Paris | 13.0 | NaN | NaN |
| 10085 | Swiss Air | Brussels | London | 67.0 | 32.0 | NaN |
層次化索引
42.用 letters = ['A', 'B', 'C'] 和 numbers = list(range(10))的組合作為系列隨機值的層次化索引
letters?=?['A',?'B',?'C'] numbers?=?list(range(4))mi?=?pd.MultiIndex.from_product([letters,?numbers]) s?=?pd.Series(np.random.rand(12),?index=mi) s A??0????0.8678281????0.6336802????0.3283333????0.726590 B??0????0.9726931????0.1403612????0.9058363????0.072299 C??0????0.7879101????0.4080232????0.5322203????0.219010 dtype:?float6443.檢查s是否是字典順序排序的
s.index.is_lexsorted() #?方法二 #?s.index.lexsort_depth?==?s.index.nlevels True44.選擇二級索引為1, 3的行
s.loc[:,?[1,?3]] A??1????0.6336803????0.726590 B??1????0.1403613????0.072299 C??1????0.4080233????0.219010 dtype:?float6445.對s進行切片操作,取一級索引從頭至B,二級索引從2開始到最后
s.loc[pd.IndexSlice[:'B',?2:]] #?方法二 #?s.loc[slice(None,?'B'),?slice(2,?None)] A??2????0.3283333????0.726590 B??2????0.9058363????0.072299 dtype:?float6446.計算每個一級索引的和(A, B, C每一個的和)
s.sum(level=0) #方法二 #s.unstack().sum(axis=0) A????2.556431 B????2.091189 C????1.947163 dtype:?float6447.交換索引等級,新的Series是字典順序嗎?不是的話請排序
new_s?=?s.swaplevel(0,?1) print(new_s) print(new_s.index.is_lexsorted()) new_s?=?new_s.sort_index() print(new_s) 0??A????0.867828 1??A????0.633680 2??A????0.328333 3??A????0.726590 0??B????0.972693 1??B????0.140361 2??B????0.905836 3??B????0.072299 0??C????0.787910 1??C????0.408023 2??C????0.532220 3??C????0.219010 dtype:?float64 False 0??A????0.867828B????0.972693C????0.787910 1??A????0.633680B????0.140361C????0.408023 2??A????0.328333B????0.905836C????0.532220 3??A????0.726590B????0.072299C????0.219010 dtype:?float64可視化
import?matplotlib.pyplot?as?plt df?=?pd.DataFrame({"xs":[1,5,2,8,1],?"ys":[4,2,1,9,6]}) plt.style.use('ggplot')48.畫出df的散點圖
df.plot.scatter("xs",?"ys",?color?=?"black",?marker?=?"x") <matplotlib.axes._subplots.AxesSubplot?at?0x7fbb753a8eb8>49.可視化指定4維DataFrame
df?=?pd.DataFrame({"productivity":[5,2,3,1,4,5,6,7,8,3,4,8,9],"hours_in"????:[1,9,6,5,3,9,2,9,1,7,4,2,2],"happiness"???:[2,1,3,2,3,1,2,3,1,2,2,1,3],"caffienated"?:[0,0,1,1,0,0,0,0,1,1,0,1,0]})df.plot.scatter("hours_in",?"productivity",?s?=?df.happiness?*?100,?c?=?df.caffienated) <matplotlib.axes._subplots.AxesSubplot?at?0x7fbb752f5780>50.在同一個圖中可視化2組數據,共用X軸,但y軸不同
df?=?pd.DataFrame({"revenue":[57,68,63,71,72,90,80,62,59,51,47,52],"advertising":[2.1,1.9,2.7,3.0,3.6,3.2,2.7,2.4,1.8,1.6,1.3,1.9],"month":range(12)})ax?=?df.plot.bar("month",?"revenue",?color?=?"green") df.plot.line("month",?"advertising",?secondary_y?=?True,?ax?=?ax) ax.set_xlim((-1,12));參考資料:
100-pandas-puzzles - GitHub
Pandas 百題大沖關
END
來和小伙伴們一起向上生長呀~~~
掃描下方二維碼,添加小詹微信,可領取千元大禮包并申請加入 Python學習交流群,群內僅供學術交流,日常互動,如果是想發推文、廣告、砍價小程序的敬請繞道!一定記得備注「交流學習」,我會盡快通過好友申請哦!
(添加人數較多,請耐心等待)
(掃碼回復 1024? 即可領取IT資料包)
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的带你玩转Pandas的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我花 1 分钟写了一段爬虫,帮助小姐姐解
- 下一篇: PyCharm 2020.1 稳定版发布