【发布时间】:2021-07-26 05:03:24
【问题描述】:
我想在数据框中添加一个新列。新列依赖于一些规则。
这是我的代码:
#!/usr/bin/python3.6
# coding=utf-8
import sys
import pandas as pd
import numpy as np
import io
import csv
df = pd.read_csv(sys.stdin,sep=',',encoding='utf-8',engine="python")
col_0 = check
df['df_cal'] = df.groupby(col_0)[col_0].transform('count')
df['status'] = np.where(
df['df_cal'] > 1,'change',
'New')
df = df.drop_duplicates(
subset=df.columns.difference(['keep']),keep = False)
df = df[(df.keep == '2')]
df.drop(['keep','df_cal'],axis = 1,inplace = True)
# print(sys.stdin)
df.to_csv(sys.stdout,encoding='utf-8',index = None)
样本 csv:
VIP_number,keep
ab1,1
ab1,2
ab2,2
ab3,1
当我尝试运行这段代码时,我会这样写命令:
python3.6 nifi_python.py < test.csv check = VIP_number
我得到了错误:
name 'check' is not defined
这仍然行不通,因为我不知道如何通过标准输入将列名输入 col_0。 col_0 应该是“VIP_number”。我不想硬编码列名,因为脚本将在下次使用,但列不同。
如何通过标准输入在数据框中添加新列? 任何帮助将不胜感激。
【问题讨论】:
-
嗯,是的,当然,因为
check在您尝试在这里使用之前没有在任何地方定义:col_0 = check。你为什么认为它会被定义? -
你基本上似乎在问如何接受你的 python 脚本的命令行参数?在这种情况下,这个问题与熊猫或标准输入无关......
-
您是否尝试将“check”作为命令行参数传递?我可以告诉你怎么做。
-
@TimRoberts 我相信可能是这样。但在那种情况下,它肯定是重复的
-
https://stackoverflow.com/questions/16048237/pass-variable-between-python-scripts/16048264:请查收。我认为这对您有帮助。
标签: python pandas dataframe stdin