wordpress背景圖更改網(wǎng)站自然優(yōu)化
最近一直在做數(shù)據(jù)處理相關(guān)的工作,有幾點(diǎn)經(jīng)常遇到的情況總結(jié)如下:
- 數(shù)據(jù)中存在為空數(shù)據(jù)如何處理
處理方式1:丟棄數(shù)據(jù)行
# 實(shí)現(xiàn)方式1
data = data.dropna(subset=['id']) # 若id列中某行數(shù)值為空,丟棄整行數(shù)據(jù)
# 實(shí)現(xiàn)方式2
data = df[df['id'].notna()]處理方式2:填充,定值填充或插值填充
data['value'] = data['value'].fillna(0.0) # 使用0.0對(duì)value列中空值進(jìn)行填充
- 丟棄某行某列
# 如果rn列存在,丟棄該列
if 'rn' in df.columns:df = df.drop('rn', axis=1) # axis控制行列# 若直接在原數(shù)據(jù)做操作,需設(shè)置inplace參數(shù)df.drop('rn', axis=1, inplace=True)
- 如何對(duì)某列中字符串?dāng)?shù)據(jù)進(jìn)行批量操作
# 設(shè)time中數(shù)據(jù)為12:34這種類(lèi)型
df['time'].str.split(':',expand=True).astype(int)
# expand參數(shù)用以將分割的字符串展開(kāi)為單獨(dú)的列,astype用于轉(zhuǎn)換數(shù)據(jù)類(lèi)型
- 數(shù)據(jù)中不存在某列,添加列
# 添加有值的列如何做
data = {'A': ['item1', 'item2', 'item3', 'item4'],'B': ['0.1', '0.2', '0.3', '0.4']
}
df = pd.DataFrame(data)# 增加一列'id'字段, 并選擇特定行賦值
df.loc[[True, False, True, True],'id'] = ['1', '2', '3']
# 不支持同時(shí)加兩列,只能加單列# 添加無(wú)值的列,再進(jìn)行處理
df['add'] = np.nan
df['add'] = np.where(df['hour'] >= 1000, 1, 0)
df['hour'] = np.where(df['hour'] >= 1000, df['hour'] - 1000, df['hour'])
- 一些日期處理函數(shù)
# pd.to_datetime
# 將day轉(zhuǎn)為datetime格式
tmp_day = pd.to_datetime(df['day'], format='%Y%m%d')# pd.to_timedelta
timestamp = tmp_day + pd.to_timedelta(df['hour'], unit='h') + pd.to_timedelta(df['min'],unit='m') + pd.to_timedelta(df['add'], unit='D')
- 一些處理函數(shù)
# id分組中,源數(shù)據(jù)只有一行batch字段有填充,函數(shù)實(shí)現(xiàn)將batch拓展填充到各數(shù)據(jù)行
df['batch'] = df.groupby('id')['batch'].transform(lambda x: x.fillna(method='ffill').fillna(method='bfill'))
# 首先通過(guò)groupby函數(shù)根據(jù)id列對(duì)數(shù)據(jù)進(jìn)行分組,然后對(duì)每個(gè)分組使用transform函數(shù)。
# transform函數(shù)中的lambda函數(shù)使用fillna方法先向前(ffill)填充分組中的np.nan值,
# 如果某一分組中的第一行為np.nan,則之后再向后(bfill)填充。# 對(duì)每個(gè)id分組,執(zhí)行apply操作,運(yùn)行數(shù)據(jù)處理函數(shù),實(shí)現(xiàn)功能
def trans(df):df = df.groupby('id').apply(lambda group: group.apply(process_column))return df
def process_column(col):# 若數(shù)據(jù)列名中存在period或?yàn)閍 b c,將該組數(shù)據(jù)用;連接起來(lái)返回if 'period' in col.name or col.name in ['a','b','c']:return ';'.join(str(v) for v in col)else:# 其余數(shù)據(jù)直接做unique返回return col.unique()