【问题标题】:pandas read_csv add attributes by stdin issuepandas read_csv 通过标准输入问题添加属性
【发布时间】: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


【解决方案1】:
#!/usr/bin/python3.6
# coding=utf-8

import sys
import pandas as pd
import numpy as np
import io
import csv

if len(sys.argv) < 2:
    print( "Usage:  nifi_python.py check=<column>"
    sys.exit(1)

df = pd.read_csv(sys.stdin,sep=',',encoding='utf-8',engine="python")

col_0 = sys.argv[1].split('=')[1]

...
python nifi_python.py check=VIP_number < test.csv

【讨论】:

    猜你喜欢
    • 2019-10-10
    • 2017-07-16
    • 1970-01-01
    • 2015-02-17
    • 2016-10-02
    • 2017-09-27
    • 2015-02-04
    相关资源
    最近更新 更多