如何使用pandas将字符串中的值转换为列?

2024-03-28 23:48:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个dataframe(dataframe做测试)。每行都有很多值。我想提取“:”之前的每个值,并将其放入新列中。例如,我将提取这些值:MemTotal、MemFree、MemAvailable等;它们将成为新的列(所需的数据帧)

所需数据帧(我需要所有值)

memory = {
    'MemTotal': [1009652, 1009652, 1009652],
    'MemFree': [573728, 573728, 573728],
    'MemAvailable': [700020, 700020, 700020], 
    'Hugepagesize': [2048, 2048, 2048]}

df_memo  = pd.DataFrame(memory, columns = ['MemTotal', 'MemFree', 'MemAvailable', 'Hugepagesize'])
df_memo

数据帧进行测试

memory = {
    'RAM': ['MemTotal:        1009652 kB\nMemFree:          573728 kB\nMemAvailable:     700020 kB\nBuffers:           16576 kB\nCached:           182128 kB\nSwapCached:            0 kB\nActive:           159320 kB\nInactive:         138220 kB\nActive(anon):      99752 kB\nInactive(anon):    23752 kB\nActive(file):      59568 kB\nInactive(file):   114468 kB\nUnevictable:           0 kB\nMlocked:               0 kB\nSwapTotal:             0 kB\nSwapFree:              0 kB\nDirty:               312 kB\nWriteback:             0 kB\nAnonPages:         96984 kB\nMapped:            62476 kB\nShmem:             24584 kB\nSlab:              67532 kB\nSReclaimable:      28092 kB\nSUnreclaim:        39440 kB\nKernelStack:        2644 kB\nPageTables:         2232 kB\nNFS_Unstable:          0 kB\nBounce:                0 kB\nWritebackTmp:          0 kB\nCommitLimit:      504824 kB\nCommitted_AS:     422480 kB\nVmallocTotal:   135290290112 kB\nVmallocUsed:           0 kB\nVmallocChunk:          0 kB\nAnonHugePages:      8192 kB\nShmemHugePages:        0 kB\nShmemPmdMapped:        0 kB\nCmaTotal:         327680 kB\nCmaFree:          292512 kB\nHugePages_Total:       0\nHugePages_Free:        0\nHugePages_Rsvd:        0\nHugePages_Surp:        0\nHugepagesize:       2048 kB\n', 'MemTotal:        1009652 kB\nMemFree:          573728 kB\nMemAvailable:     700020 kB\nBuffers:           16576 kB\nCached:           182128 kB\nSwapCached:            0 kB\nActive:           159320 kB\nInactive:         138220 kB\nActive(anon):      99752 kB\nInactive(anon):    23752 kB\nActive(file):      59568 kB\nInactive(file):   114468 kB\nUnevictable:           0 kB\nMlocked:               0 kB\nSwapTotal:             0 kB\nSwapFree:              0 kB\nDirty:               312 kB\nWriteback:             0 kB\nAnonPages:         96984 kB\nMapped:            62476 kB\nShmem:             24584 kB\nSlab:              67532 kB\nSReclaimable:      28092 kB\nSUnreclaim:        39440 kB\nKernelStack:        2644 kB\nPageTables:         2232 kB\nNFS_Unstable:          0 kB\nBounce:                0 kB\nWritebackTmp:          0 kB\nCommitLimit:      504824 kB\nCommitted_AS:     422480 kB\nVmallocTotal:   135290290112 kB\nVmallocUsed:           0 kB\nVmallocChunk:          0 kB\nAnonHugePages:      8192 kB\nShmemHugePages:        0 kB\nShmemPmdMapped:        0 kB\nCmaTotal:         327680 kB\nCmaFree:          292512 kB\nHugePages_Total:       0\nHugePages_Free:        0\nHugePages_Rsvd:        0\nHugePages_Surp:        0\nHugepagesize:       2048 kB\n', 'MemTotal:        1009652 kB\nMemFree:          573728 kB\nMemAvailable:     700020 kB\nBuffers:           16576 kB\nCached:           182128 kB\nSwapCached:            0 kB\nActive:           159320 kB\nInactive:         138220 kB\nActive(anon):      99752 kB\nInactive(anon):    23752 kB\nActive(file):      59568 kB\nInactive(file):   114468 kB\nUnevictable:           0 kB\nMlocked:               0 kB\nSwapTotal:             0 kB\nSwapFree:              0 kB\nDirty:               312 kB\nWriteback:             0 kB\nAnonPages:         96984 kB\nMapped:            62476 kB\nShmem:             24584 kB\nSlab:              67532 kB\nSReclaimable:      28092 kB\nSUnreclaim:        39440 kB\nKernelStack:        2644 kB\nPageTables:         2232 kB\nNFS_Unstable:          0 kB\nBounce:                0 kB\nWritebackTmp:          0 kB\nCommitLimit:      504824 kB\nCommitted_AS:     422480 kB\nVmallocTotal:   135290290112 kB\nVmallocUsed:           0 kB\nVmallocChunk:          0 kB\nAnonHugePages:      8192 kB\nShmemHugePages:        0 kB\nShmemPmdMapped:        0 kB\nCmaTotal:         327680 kB\nCmaFree:          292512 kB\nHugePages_Total:       0\nHugePages_Free:        0\nHugePages_Rsvd:        0\nHugePages_Surp:        0\nHugepagesize:       2048 kB\n']}
df = pd.DataFrame(memory, columns = ['RAM'])
df

Tags: 数据dfkbfilememoryanonmemtotalmemfree
1条回答
网友
1楼 · 发布于 2024-03-28 23:48:37

也许.str.extract()就是你要寻找的

print(df['RAM'].str.extract(r'MemTotal:\s*(?P<MemTotal>\d+).*?MemFree:\s*(?P<MemFree>\d+).*?MemAvailable:\s*(?P<MemAvailable>\d+)', flags=re.S))

印刷品:

  MemTotal MemFree MemAvailable
0  1009652  573728       700020
1  1009652  573728       700020
2  1009652  573728       700020

编辑:要提取所有键/值,请执行以下操作:

def split(x):
    out = {}
    for line in x.split('\n'):
        if ':' not in line:
            continue
        a, b = map(str.strip, line.split(':'))
        out[a] = b.split()[0]
    return out

df = pd.DataFrame(df['RAM'].apply(split).to_list())
print(df)

印刷品:

  MemTotal MemFree MemAvailable  ... HugePages_Rsvd HugePages_Surp Hugepagesize
0  1009652  573728       700020  ...              0              0         2048
1  1009652  573728       700020  ...              0              0         2048
2  1009652  573728       700020  ...              0              0         2048

相关问题 更多 >