Pandas
是一個基于NumPy的數據分析模塊,最初由AQR Capital Management于2008年4月開發,并于2009年底開源。Pandas的名稱來源于“Panel Data”(面板數據)和“Python數據分析”(data analysis)。這個庫現在由專注于Python數據包開發的PyData開發團隊繼續開發和維護,屬于PyData項目的一部分。
Pandas為Python提供了大量的數據處理函數和方法,使得Python成為強大而高效的數據分析環境。這個庫主要提供了三種數據結構:Series(帶標簽的一維數組)、DataFrame(帶標簽且大小可變的二維表格結構)和Panel(帶標簽且大小可變的三維數組)。這些數據結構使得Pandas能夠高效地處理大型數據集。
Pandas的主要功能包括數據清理、數據轉換、數據提取和分析等。它可以幫助用戶解決各種數據問題,如檢查兩個或多個列之間是否存在相關性,計算數據的平均值、最大值、最小值等。此外,Pandas還能夠刪除不相關的行或包含錯誤值的行,這被稱為數據清洗。
示例
提高可讀性的列重命名:重命名DataFrame列以提高可讀性。
df.rename(columns={'old_name': 'new_name'}, inplace=True)
為MultiIndex DataFrames展平索引:為簡化起見,展平MultiIndex DataFrame。
df.columns = ['_'.join(col).strip() for col in df.columns.values]
為DataFrame應用條件格式:使用Styler突出顯示特定數據點。
df.style.applymap(lambda x: 'background-color: yellow' if x > 0 else 'background-color: red')
使用分類數據類型優化性能:將對象類型轉換為分類類型,以加快操作速度并減少內存使用。
df['category'] = df['category'].astype('category')
使用filter動態過濾行:根據動態條件過濾DataFrame行。
df_filtered = df.filter(regex='pattern')
在多個列上應用函數:使用apply和axis=1在行上應用函數。
df['new_column'] = df.apply(lambda row: row['a'] + row['b'], axis=1)
使用concat高效合并DataFrames:在管理索引的同時垂直或水平連接DataFrames。
pd.concat([df1, df2], axis=0, ignore_index=True)
使用read_csv參數進行選擇性讀取:使用read_csv中的參數讀取文件的特定行、列或塊。
df = pd.read_csv('file.csv', usecols=['col1', 'col2'], nrows=100)
使用fillna處理缺失數據:用特定值或計算值(如列的均值)填充缺失值。
df.fillna(df.mean(), inplace=True)
檢測和過濾異常值:根據z分數或IQR識別并刪除異常值。
from scipy.stats import zscore?
df = df[(np.abs(zscore(df)) < 3).all(axis=1)]
用于報告的DataFrame樣式化:使用Pandas Styler為報告生成向DataFrame添加CSS樣式。
df.style.set_properties(**{'background-color': 'black', 'color': 'white'})
從列創建MultiIndex:將DataFrame列轉換為MultiIndex以創建分層級別。
df.set_index(['col1', 'col2'], inplace=True)
使用groupby和自定義函數進行聚合:對數據進行分組并應用自定義聚合函數進行詳細分析。
df.groupby('group').agg({'data': lambda x: x.max() - x.min()})
時間序列分解:將時間序列數據分解為趨勢、季節性和殘差分量。
from statsmodels.tsa.seasonal import seasonal_decompose?
result = seasonal_decompose(df['time_series'], model='additive', freq=365)?
result.plot()
為時間序列分析創建滯后特征:創建滯后特征以在時間序列預測的機器學習模型中使用。
df['lag_1'] = df['series'].shift(1)
使用pivot_table進行多維分析:為復雜數據匯總創建類似電子表格的數據透視表。
df.pivot_table(values='D', index=['A', 'B'], columns=['C'], aggfunc=np.sum)
使用set_index進行自定義索引:將DataFrame列設置為索引以便于行查找。
df.set_index('column_name', inplace=True)
大型數據集的批處理:以批處理方式處理大型數據集以最小化內存使用。
chunk_size = 10000
for chunk in pd.read_csv('large_dataset.csv', chunksize=chunk_size):
? ? process(chunk)
使用melt進行數據規范化:將DataFrame從寬格式規范化或展開到長格式。
pd.melt(df, id_vars=['id'], value_vars=['A', 'B', 'C'])
使用query安全訪問數據:使用query方法使用查詢表達式過濾DataFrame。
df.query('column > 100')
使用loc進行條件選擇:使用loc基于標簽進行更復雜的條件選擇。
df_filtered = df.loc[df['column'] > 10, ['column1', 'column2']]
使用at和iat進行快速標量訪問:使用at進行基于標簽的標量訪問,使用iat進行基于整數的訪問。
value = df.at[0, 'column'] value = df.iat[0, 1]
多級索引xs:使用xs從具有多級索引的DataFrame獲取交叉部分。
value = df.xs('Level1', level='LevelName', axis=0)
使用factorize創建虛擬變量:將分類變量數值化為虛擬/指示變量。
df['category_encoded'], _ = pd.factorize(df['category_column'])
使用eval和query進行動態查詢:使用字符串表達式進行高效查詢和列操作。
df_filtered = df.query('column > 10')
df.eval('new_column = column1 + column2', inplace=True)
使用sort_values進行自定義排序:按照一個或多個列進行排序,并指定自定義排序順序。
df_sorted = df.sort_values(by=['column1', 'column2'], ascending=[True, False])
使用to_datetime進行高效日期解析:將字符串日期有效地轉換為日期時間對象。
df['date'] = pd.to_datetime(df['date_string'], format='%Y-%m-%d')
使用chunksize處理大型數據:以可管理的塊處理大型數據。
for chunk in pd.read_csv('large_file.csv', chunksize=10000):
? ? process(chunk)
自定義Groupby聚合:對groupby對象應用自定義聚合函數。
df_grouped = df.groupby('group_column').agg({'data_column': ['mean', 'std', lambda x: x.max() - x.min()]})
時間序列重采樣:對時間序列數據進行降采樣或升采樣。
df_resampled = df.resample('M').mean()
使用pivot進行數據重格式化:基于列值對表進行數據透視。
df_pivoted = df.pivot(index='date', columns='variable', values='value')
使用Multi-Index進行stack和unstack:將具有多級列的DataFrame轉換為更緊湊的形式。
stacked = df.stack()?
unstacked = stacked.unstack()
字符串和類別類型之間的轉換:將數據類型轉換為優化內存使用的格式。
df['string_column'] = df['category_column'].astype('string')
df['category_column'] = df['string_column'].astype('category')
使用不同連接類型合并DataFrames:執行左連接、右連接、內連接和外連接,類似于SQL。
df_merged = pd.merge(df1, df2, how='left', on='key_column')
使用iloc切片DataFrame:使用iloc進行基于位置的索引,通過整數位置選擇行和列。
df_subset = df.iloc[0:5, [1, 2]]
根據條件創建數據屏蔽:創建布爾屏蔽以過濾數據。
mask = (df['column'] > 10) & (df['column'] < 20)
df_masked = df[mask]
時間序列的擴展和滾動操作:使用擴展或滾動操作進行累積計算。
df_expanding = df['data_column'].expanding().mean()
df_rolling = df['data_column'].rolling(window=5).mean()
數據轉換的列映射:對數據轉換應用字典映射到列。
df['column_mapped'] = df['column'].map(mapping_dict)
將字符串拆分為列:將字符串數據拆分為單獨的列。
df[['first', 'last']] = df['name'].str.split(' ', expand=True)
在多個級別聚合數據:對groupby執行多級別聚合。
df_multi_agg = df.groupby(['level1', 'level2']).agg({'data1': 'mean', 'dat
使用query進行過濾:query方法允許更可讀的過濾語法,特別是對于復雜條件。
df_filtered = df.query('a > 1 and b < 4')
使用assign創建新列:動態向DataFrame添加新列,這對于鏈式操作特別有用。
df = df.assign(new_column=lambda x: x['a'] + x['b'])
使用applymap進行矢量化操作:在DataFrame上逐元素地應用函數,對于將變換應用于每個元素很有用。
df = df.applymap(lambda x: x*2)
連接DataFrames:垂直或水平組合多個DataFrames。
df_combined = pd.concat([df1, df2], axis=0) ?# 垂直
在關鍵列上合并DataFrames:根據關鍵列合并DataFrames,類似于SQL連接。
df_merged = pd.merge(df1, df2, on='key_column')
使用get_dummies進行獨熱編碼:將分類變量轉換為虛擬/指示變量。
df_with_dummies = pd.get_dummies(df, columns=['category_column'])
自定義聚合的GroupBy:對數據進行分組并應用自定義聚合函數。
df_grouped = df.groupby('group_column').agg(custom_agg_func)
使用cut對數據進行分箱:將數據值分段和排序到箱中。
df['binned_column'] = pd.cut(df['numeric_column'], bins=3)
使用replace進行數據清理:替換DataFrame中的值。
df = df.replace({'old_value': 'new_value'})
刪除具有缺失值的列:刪除具有一定百分比缺失值的列。
df = df.dropna(axis=1, thresh=int(0.9*len(df)))
DataFrame內存使用情況:檢查DataFrame的內存使用情況。
df_memory_usage = df.memory_usage(deep=True)
使用select_dtypes按數據類型選擇列:根據數據類型篩選列。
df_numeric = df.select_dtypes(include=['int64', 'float64'])
設置和重置索引:使用列作為DataFrame索引或將其重置。
df.set_index('column_name', inplace=True)
df.reset_index(inplace=True)
使用iterrows對行進行迭代:以(index, Series)對的形式循環DataFrame行。
for index, row in df.iterrows():
? ? print(index, row['column'])
對DataFrame操作使用inplace=True:許多DataFrame方法提供inplace參數,允許在原地修改DataFrame而不將結果分配給新變量。這可以使代碼更簡潔,減少內存使用。
import pandas as pddf = pd.DataFrame([[1, 2, 3],[4, 5, 6],[None, 2, 3],[None, 5, 6],
], columns=['a', 'b', 'c'])# 刪除帶有NaN值的行
df.dropna(inplace=True)
print(df)
使用melt進行數據重塑:將DataFrame從寬格式重塑為長格式,可選擇保留標識符。
df_melted = pd.melt(df, id_vars=['identifier_column'], value_vars=['value_column'])
日期和時間操作:提取或操作日期時間對象的組件。
df['year'] = df['datetime_column'].dt.year
將DataFrame保存為各種格式:將DataFrame導出為CSV、Excel或SQL數據庫。
df.to_csv('filename.csv', index=False)
df.to_excel('filename.xlsx', sheet_name='Sheet1')
使用特定dtypes讀取數據:在加載數據時指定列數據類型以節省內存。
df = pd.read_csv('filename.csv', dtype={'column': 'dtype'})
使用eval進行高效操作:評估描述DataFrame列操作的字符串。
df['new_column'] = df.eval('column1 + column2')
使用str方法進行數據清洗:清理或操作字符串列。
df['string_column'] = df['string_column'].str.strip().str.lower()
使用df.to_clipboard()將數據復制到剪貼板:將DataFrame的內容復制到剪貼板。
import pandas as pddf = pd.DataFrame([[1, 2, 3],[4, 5, 6]
], columns=['a', 'b', 'c'])# 將DataFrame復制到剪貼板
df.to_clipboard()
使用.T轉置DataFrame:轉置DataFrame會交換其行和列,這在數據分析中特別有用,特別是當您想要更改數據集的方向以進行可視化或比較時。
import pandas as pddf = pd.DataFrame([[1, 2, 3],[4, 5, 6]
], columns=['a', 'b', 'c'])# 轉置DataFrame
df_transposed = df.T
print(df_transposed)
使用.apply()應用函數:.apply()方法允許您在DataFrame或Series的軸上應用函數。對于將復雜函數或lambda表達式應用于數據元素非常有用。
import pandas as pddf = pd.DataFrame([[1, 2, 3],[4, 5, 6],[7, 8, 9]
], columns=['a', 'b', 'c'])# 在“a”列中求平方
df['a_squared'] = df['a'].apply(lambda x: x**2)
print(df)
使用~反轉過濾條件:使用波浪符~反轉布爾條件。當您想要選擇不匹配某個條件的行時特別有用,例如在DataFrame中選擇非空值。
import pandas as pddf = pd.DataFrame([[1, 2, 3],[1, 2, 4],[None, 2, 4],[2, 2, 3],[None, 2, 4]
], columns=['a', 'b', 'c'])# 通過反轉過濾選擇“a”不是NaN的行
df_not_null = df[~df['a'].isna()]
print(df_not_null)
條件列創建:使用np.where根據條件創建新列。
df['new_column'] = np.where(df['column'] > condition, value_if_true, value_if_false)
多重索引創建:為更復雜的數據分析創建分層索引(MultiIndex)。
df.set_index(['column1', 'column2'], inplace=True)
透視表:生成用于匯總數據的透視表。
df.pivot_table(values='value_column', index='index_column', columns='columns_column', aggfunc=np.sum)
類別數據轉換:將分類數據轉換為‘category’類型以提高效率。
df['category_column'] = df['category_column'].astype('category')
在索引上合并:使用它們的索引合并兩個數據幀。
pd.merge(df1, df2, left_index=True, right_index=True)
窗口函數:使用滾動窗口進行計算。
df['rolling_sum'] = df['value'].rolling(window=3).sum()
使用GroupBy進行聚合:使用groupby執行高級聚合。
df.groupby('group_column').agg({'value_column': ['sum', 'mean', 'std']})
處理缺失數據:使用插值方法智能地處理缺失數據。
df.interpolate(method='linear', inplace=True)
矢量化字符串操作:使用矢量化操作無需循環應用字符串方法。
df['string_column'].str.upper()
日期處理:將字符串轉換為日期時間并提取特征。
df['date_column'] = pd.to_datetime(df['date_column'])
df['year'] = df['date_column'].dt.year
內存優化:通過將數字列下降轉換為整數來減少內存使用。
df['int_column'] = pd.to_numeric(df['int_column'], downcast='integer')
交叉表:創建交叉表以探索兩列之間的關系。
pd.crosstab(df['column1'], df['column2'])
展開列表:將DataFrame列中的列表擴展為單獨的行。
df.explode('list_column')
數據歸一化:為機器學習歸一化數據列。
df['normalized'] = (df['column'] - df['column'].mean()) / df['column'].std()
條件應用函數:根據條件將函數應用于特定行或列。
df.apply(lambda x: func(x) if condition else x)
處理重復行:識別并刪除重復行。
df.drop_duplicates(subset=['column1', 'column2'], keep='first')
類別排序:邏輯排序類別,而不是按字母順序排序。
from pandas.api.types import CategoricalDtype
cat_type = CategoricalDtype(categories=['low', 'medium', 'high'], ordered=True)
df['ordered_category'] = df['category_column'].astype(cat_type)
時間序列重采樣:為不同的時間框架重采樣時間序列數據。
df.resample('M').mean()
過濾的查詢方法:使用查詢更簡潔地過濾行。
df.query('column > value')
為DataFrame應用樣式:為更好地可視化,在DataFrame上應用條件格式。
df.style.applymap(lambda x: 'color: red' if x < 0 else 'color: black')
動態列選擇:根據條件檢查其數據類型或其他條件選擇列。
numeric_cols = df.select_dtypes(include=['int64', 'float64']).columns
高效的日期范圍創建:生成日期和時間序列。
dates = pd.date_range(start='2020-01-01', end='2020-12-31', freq='D')
自定義列聚合:在groupby中對不同列應用不同的聚合函數。
df.groupby('group_col').agg({'data1': 'sum', 'data2': 'mean'})
DataFrame聯接操作:使用索引或公共列聯接DataFrame,類似于SQL聯接。
df_joined = df1.join(df2.set_index('key'), on='key')
保存到多個Excel表:將不同的DataFrame寫入同一Excel文件的不同工作表。
with pd.ExcelWriter('output.xlsx') as writer:
? ? df1.to_excel(writer, sheet_name='Sheet1')
? ? df2.to_excel(writer, sheet_name='Sheet2')
列合并:按列合并DataFrame,根據索引對齊。
df_concat = pd.concat([df1, df2], axis=1)
按行數據追加:將一個DataFrame的行追加到另一個DataFrame。
df_appended = df1.append(df2, ignore_index=True)
類別數據排序:控制分類數據中類別的順序。
df['category'] = pd.Categorical(df['category'], categories=['low', 'medium', 'high'], ordered=True)
重復行識別:基于特定列識別和處理重復行。
duplicates = df.duplicated(subset=['col1', 'col2'], keep=False)
df_duplicates = df[duplicates]
加權平均數計算:為分組數據計算加權平均數。
df['weighted_mean'] = df.groupby('group')['value'].transform(lambda x: np.average(x, weights=df.loc[x.index, 'weight']))
用于數據概覽的Pandas Profiling:為DataFrame生成全面的報告進行初步數據分析。
import pandas_profiling
report = pandas_profiling.ProfileReport(df)
report.to_file("data_analysis.html")
多重索引操作用于分層數據:使用分層索引(MultiIndex)操作DataFrame以處理復雜數據結構。
df_multi = df.set_index(['level_1', 'level_2'])
使用布爾索引對DataFrame進行切片:使用布爾條件對DataFrame進行切片以進行數據子集化。
df_sliced = df[df['column'] > value]
滾動窗口計算:在滾動窗口中執行計算,例如移動平均數。
df_rolling_avg = df['data_column'].rolling(window=5).mean()
擴展窗口用于累積計算:使用擴展窗口計算累積統計信息。
df_cum_sum = df['data_column'].expanding().sum()
總結
總的來說,Pandas是一個強大而靈活的數據分析工具,它使得Python在數據分析領域具有廣泛的應用。無論是金融、科學、社會科學還是其他領域,Pandas都可以幫助用戶高效地處理和分析數據,從而得出有價值的結論。以上100個基本操作實例涉及數據排序、數值計算、數據分析、重復處理、布爾索引切片、多重索引設置、文件操作等等操作,其中提到的函數、方法和屬性包括不限于以下索引:
函數索引
agg, append, apply, astype, at, columns, concat, crosstab, date_range, downcast, drop_duplicates, dropna, duplicated, eval, expanding, explode, fillna, filter, groupby, iloc, inplace, interpolate, iterrows, join, keep, loc, map, mask, melt, memory_usage, merge, np.average, np.where, pandas_profiling.ProfileReport, pd.Categorical, pd.factorize, pd.melt, pd.to_datetime, pivot, pivot_table, query, read_csv, resample, rolling, seasonal_decompose, select_dtypes, set_index, reset_index, shift, sort_values, stack,\xa0unstack, style.applymap, to_clipboard, to_csv, to_excel, to_datetime, to_file, agg, append, apply, astype, at, columns, concat, crosstab, date_range, downcast, drop_duplicates, dropna, duplicated, eval, expanding, explode, fillna, filter, groupby, iloc, inplace, interpolate, iterrows, join, keep, loc, map, mask, melt, memory_usage, merge, np.average, np.where, pandas_profiling.ProfileReport, pd.Categorical, pd.factorize, pd.melt, pd.to_datetime, pivot, pivot_table, query, read_csv, resample, rolling, seasonal_decompose, select_dtypes, set_index, reset_index, shift, sort_values, stack,\xa0unstack, style.applymap, to_clipboard, to_csv, to_excel, to_datetime, to_file?