如何使用Pandas在csv文件中创建新列,并根据这些列中的值添加数据

问题描述 投票:1回答:1

我正在尝试根据该列的部分信息,使用来自另一列的数据来创建一列,例如,我有一个设备列表;

 devicename        make     devicevalue
 switch1           cisco        0
 switch1-web100    netgear      0  
 switch10          cisco        0
 switch23          cisco        1
 switch31-web200   netgear      0
 switch31          cisco        1
 switch40          cisco        1

该列需要有2个变量

  • 如果make = netgear(设置为0)
  • 如果设备名以20或更大的结尾(设置为1,否则设置为0)
  • 或者,也不必查看制造商,设备名称也可以通过网络进行过滤。

我正在使用Panda's打开csv文件,进行编辑(对于其他一些列)然后保存,但是我对此有困难。

这是我必须去的地方,但是我知道它不起作用,但是我有点迷茫,我对Python还是很陌生;

import pandas as pd

df = pd.read_csv('data.csv')
df['devicevalue'] = df.devicename
    if 'netgear' in df.name df.set_value '0'
    if str.endswith > 20 df.set_value '0'
    else if df.set_value '1'

我意识到以上内容可能根本不正确,但我有点迷茫。

python python-3.x pandas csv
1个回答
0
投票

尝试以下操作:

import pandas as pd

df = pd.DataFrame(columns=['devicename', 'make'])
df.loc[0] = ['switch1', 'cisco']
df.loc[1] = ['switch1-web100', 'netgear']
df.loc[2] = ['switch10', 'cisco']
df.loc[3] = ['switch23', 'cisco']
df.loc[4] = ['switch31-web200', 'netgear']
df.loc[5] = ['switch31', 'cisco']
df.loc[6] = ['switch40', 'cisco']


def get_number_suffix(devicename: str) -> int:
    """
    This function looks at the last several characters, and extracts
    the last n contiguous digits, and returns as an integer.
    :param devicename:
    :return:
    """
    i = 1
    while i < len(devicename) and devicename[-i:].isnumeric():
        i += 1

    return int(devicename[-(i-1):])


def compute_devicevalue(row) -> int:
    """
    This function computes the devicevalue based on the criteria:
    If make = netgear (set to 0)
    If devicename end in 20 or greater (set to 1, otherwise set to 0)
    :param row:
    :return:
    """

    if 'netgear' in row['make']:
        return 0
    if 20 <= get_number_suffix(row['devicename']):
        return 1
    else:
        return 0


df['devicevalue'] = df.apply(compute_devicevalue, axis=1)
print(df.head(7))
© www.soinside.com 2019 - 2024. All rights reserved.