Pythonはcsv、パンダのマルチテーブル結合、時間とタイムスタンプの変換を読み取り、それが月の最初の日であるかどうかを判断します

仕事の記録、一日が終わった、頭がハクトウワシ

1.csvファイルを読み取ります

仕事ではcsvを読むシナリオを使用しますが、すべての列を読みたくありません。だから、読むことを選択する方法を記録する

# 这里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.パンダ処理

パンダが2つのdfマージを処理することはあまりにも一般的ですが、3つ以上のdfが結合された場合にも記録され
ます複数の制約キー、複数のテーブルは次のように完全結合操作を実行します:
左結合する場合は、メインテーブルを配置しますdfs [0]位置では、これらのdfによって接続されるフィールドが一貫性​​を持つように変更されている場合、単一の制約キーが1つに変更されます。df1.rename(columns = {'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

pandasが集計操作を実行すると、グループ化された列がインデックスになり、結合の関連付けを実行するときにこの列がなくなります。処理方法は次のとおりです。

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)

タイムストリングとタイムスタンプ

レンジタイム

スクリプトを実行して時間範囲全体を実行したら、今度はresリストをトラバースして時間を取得できます。

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

おすすめ

転載: blog.csdn.net/Pioo_/article/details/107468319