将 for 循环的值附加到数据框

Append values of for loop to dataframe

下面的代码可以工作并打印值,但我需要将值附加到带有列 'NAME' 和 'SystemName' 的循环数据框。

def name():
  for i in conn.Win32_LogicalDisk():
    if i.NAME is not None:
       print(i.NAME)
       print(i.SystemName)

我尝试了不同的方法,例如打印输出捕获、设置值、创建变量。我不能。

df['NAME'].set_value = i.NAME
df['Systemname'].set_value = i.SystemName

输出

| NAME | SystemName |
|------|------------|
| C:   | aaaaa      |
| D:   | bbbbb      |

与其尝试为每一行附加到空数据框,不如为每一列创建数组,然后在这些列已满时使用这些列创建数据框。

names = []
systemnames = []
for i in conn.Win32_LogicalDisk():
    names.append(i.NAME)
    systemnames.append(i.SystemName)
    
df = pd.DataFrame(list(zip(names, systemnames)),columns=['NAME', 'SystemName'])

您可以使用 pd.concat。您需要在循环的每次迭代中创建一个 DataFrame,然后将其连接到另一个原始 DataFrame。 在你的情况下:

def name():
    # Create Empty DataFrame
    df = pd.DataFrame(columns = ['NAME', 'Systemname'])
    for i in conn.Win32_LogicalDisk():
        if i.NAME is not None:
            new_df = pd.DataFrame(data = [[i.Name, i.SystemName]], columns = ['NAME', 'Systemname'])
            df= pd.concat([df, new_df])

如果你喜欢one-liner:

def name():
    # Create Empty DataFrame
    df = pd.DataFrame(columns = ['NAME', 'Systemname'])
    for i in conn.Win32_LogicalDisk():
        if i.NAME is not None:
            df = pd.concat([df, pd.DataFrame(data = [[i.Name, i.SystemName]], columns = ['NAME', 'Systemname'])])

您可以直接构建数据框,无需任何附加等:

def name():
    return pd.DataFrame(
        ([i.Name, i.SystemName] for i in conn.Win32_LogicalDisk()
         if i.Name is not None),
        columns=['NAME', 'SystemName']
    )

如果您需要在函数中对数据框执行其他任务:

def name():
    df = pd.DataFrame(
        ([i.Name, i.SystemName] for i in conn.Win32_LogicalDisk()
         if i.Name is not None),
        columns=['NAME', 'SystemName']
    )
    #  ... do the tasks ... 
    return df