Python lee csv, unión de múltiples tablas de pandas, conversión de hora y marca de tiempo, y juzga si es el primer día del mes

Registro de trabajo, se acabó el día, la cabeza está calva

1. Lea el archivo csv

Usaré el escenario de leer csv en mi trabajo, pero no quiero leer todas las columnas. . Así que registra cómo elegir leer

# 这里usecols参数选择要第几列
df_info = pd.read_csv('/data/share/' + ts + '_user_mgmt.csv.gz',usecols=[0, 5, 10, 11], low_memory=False)

# 去掉 unnamed:0 列
df = df.loc[:, ~df.columns.str.contains('Unnamed')]
# 将第一列作为index
data = pd.read_csv('1.csv', index_col=0)

2.procesamiento de pandas

Es demasiado común que los pandas procesen dos fusiones de df, pero también se registra cuando se unen más de dos dfs :
claves de restricción múltiples, varias tablas realizan una operación de unión completa de la siguiente manera:
si desea unir a la izquierda, coloque la tabla principal en la posición dfs [0], una única clave de restricción se cambia a una, siempre que los campos que se conectarán mediante estos df se modifiquen para que sean coherentes. df1.rename (columnas = {'uid': 'user_id'}, inplace = True)

# pandas多表合并
from functools import reduce
# 多个约束键,多张表做full join 操作
dfs = [df0, df1, df2, dfN]
df_final = reduce(lambda left,right: pd.merge(left,right,on=['user_id', 'asset'], how='outer'), dfs)

# 完了之后处理空值
df.dropna(axis = 0)	 # 0 删除行, 1  删除列
df.fillna(0) # 将所有 NaN 值替换为 0

Después de que los pandas realizan la operación de agregación, la columna agrupada se convertirá en un índice, lo que dará como resultado la ausencia de esta columna al realizar la asociación de unión. El método de procesamiento es el siguiente:

df = df.groupby(['user_id']).sum()

df['user_id'] = df.index

# python 分组聚合:
group = df.groupby('asset')
df = group.agg({
    
    'user_id': 'count', 'balance_coin': 'sum', 'balance_asset': 'sum', 'balance_game': 'sum','coin_amt': 'sum', 'asset_amt': 'sum', 'game_amt': 'sum'})
df.reset_index(drop=True, inplace=True)

# 去重:
df = df.drop_duplicates(['user_id'],keep=False)

# apply 函数:
df['val'] = df.apply(lambda row: my_min(row['val_1'], row['val_2']), axis=1)
#  筛选:
df_info = df_info[('2020-08-20' <= df_info.reg_time) & (df_info.reg_time <= '2020-08-25')]
# pandas将元组('symbol','name_cn')列拆分:
df_withdraw_end['symbol'].apply(pd.Series)
df_withdraw_end[['name_cn', 'symbol']] = df_withdraw_end['symbol'].apply(pd.Series)

# 多列合并成一列:
df['lat_long'] = df[['lat', 'long']].apply(tuple, axis=1)

Cadena de tiempo y sello de tiempo

Tiempo de rango

Una vez que haya ejecutado el script para ejecutar todo el rango de tiempo, esta vez puede recorrer la lista de res para obtener el tiempo.

import datetime
import time

res = []


def dateRange(beginDate, endDate):
    dates = []
    dt = datetime.datetime.strptime(beginDate, "%Y-%m-%d")
    date = beginDate[:]
    while date <= endDate:
        dates.append(date)
        dt = dt + datetime.timedelta(1)
        date = dt.strftime("%Y-%m-%d")
    return dates


for date in dateRange('2019-12-14', '2020-07-13'):
    res.append(str(date))


# 时间转化时间戳
start_date = time.strftime("%Y-%m-%d")
print(start_date) # 当前时间
datestart = datetime.datetime.strptime(start_date, '%Y-%m-%d') # date格式的时间
datestart -= datetime.timedelta(days=1)	# 前一天
# 时间戳
ts = int(time.mktime(datestart.timetuple()))
print(ts)


# 时间戳转化时间字符串
timeArray = time.localtime(1589392800)
otherStyleTime = time.strftime("%Y-%m-%d", timeArray)
print(otherStyleTime)
# 当天零点时间戳
day_time = int(time.mktime(datetime.date.today().timetuple()))
print(day_time)

def firstDayOfMonth(dt):
    """判断今天是不是这个月第一天"""
    now_day = (dt + datetime.timedelta(days=-dt.day + 1)).day
    return now_day == dt.day

Supongo que te gusta

Origin blog.csdn.net/Pioo_/article/details/107468319
Recomendado
Clasificación