0

How to combine it to single function and append all values to single df

My trials were create df_network inside network function and then create df_memory inside memory function, and then try concatenate two differnt df.

This works

def network():
    df_network = pd.DataFrame(
        ([i.DNSHostName, i.ipaddress] for i in conn.Win_ddd()),
        columns=['DNSHostName', 'ipaddress']
    )
    return df

def memory():
    df_memory = pd.DataFrame(
        ([i.Caption, i.TotalPhysicalMemory] for i in conn.Win_sss()),
        columns=['Caption', 'TotalPhysicalMemory']
    )
    return df
df_network = network()
df_memory = memory()

Something like this but i get error for below trial - If i try in single function

def total():
    df = pd.DataFrame(
        ([i.DNSHostName, i.ipaddress] for i in conn.Win_ddd()),
        columns=['DNSHostName', 'ipaddress']
        ([i.Caption, i.TotalPhysicalMemory] for i in conn.win_sss()),
        columns=['Caption', 'TotalPhysicalMemory']
    )
    return df

df.head()

| DNSHostName | ipaddress    | Caption | TotalPhysicalMemory |
|-------------|--------------|---------|---------------------|
| AAA         | xx.xx.xxx.xx | RRR     | 3434334             |
| BBB         | xx.xx.xxx.aa | FFF     | 6456456             |

3 Answers 3

2

The simplest solution here would be to use pd.concat with axis=1 to combine the two dataframes:

def total():
    df = pd.concat([
        pd.DataFrame(
            ([i.DNSHostName, i.ipaddress] for i in conn.Win_ddd()),
            columns=['DNSHostName', 'ipaddress']
        ),
        pd.DataFrame(
            ([i.Caption, i.TotalPhysicalMemory] for i in conn.Win_sss()),
            columns=['Caption', 'TotalPhysicalMemory']
        )
    ], axis=1)
    return df

df_total = total()
Sign up to request clarification or add additional context in comments.

Comments

0

I think this will do what you're asking:

class Ddd:
    def __init__(self, DNSHostName, ipaddress):
        self.DNSHostName = DNSHostName
        self.ipaddress = ipaddress
class Sss:
    def __init__(self, Caption, TotalPhysicalMemory):
        self.Caption = Caption
        self.TotalPhysicalMemory = TotalPhysicalMemory

ddd = [Ddd('host' + str(i), '000.00.0000') for i in range(5)]
sss = [Sss('caption' + str(i), 100000000000) for i in range(5)]

def total():
    df = pd.DataFrame(
        ([i.DNSHostName, i.ipaddress] for i in ddd),
        columns=['DNSHostName', 'ipaddress']
    )
    df[['Caption', 'TotalPhysicalMemory']] = pd.DataFrame([i.Caption, i.TotalPhysicalMemory] for i in sss)
    return df

print(total())

Output:

  DNSHostName    ipaddress   Caption  TotalPhysicalMemory
0       host0  000.00.0000  caption0         100000000000
1       host1  000.00.0000  caption1         100000000000
2       host2  000.00.0000  caption2         100000000000
3       host3  000.00.0000  caption3         100000000000
4       host4  000.00.0000  caption4         100000000000

Comments

0

You can use chain.from_iterable:

from itertools import chain

d1 = [[i.DNSHostName, i.ipaddress] for i in conn.Win_ddd()]
d2 = [[i.Caption, i.TotalPhysicalMemory] for i in conn.Win_sss()]

cols = ['DNSHostName', 'ipaddress', 'Caption', 'TotalPhysicalMemory']
df = pd.DataFrame((chain.from_iterable(i) for i in zip(d1, d2)), columns=cols)

Output:

>>> df
  DNSHostName ipaddress Caption  TotalPhysicalMemory
0         AAA   a.b.c.d     RRR              3434334
1         BBB   e.f.g.h     FFF              6456456

1 Comment

Thanks! but this gives the value of only 1 row.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.