为了账号安全,请及时绑定邮箱和手机立即绑定

熊猫解析文本数据并分配列

熊猫解析文本数据并分配列

达令说 2023-02-07 16:01:09
我有下面的文本数据,我想将其解析pandas为列数据。我需要每四行有四列。在My trial输出中,我们需要VC_VERSION 分成VC_ACTIVE_VERSION&VC_STANDBY_VERSION 我的审判:df  = pd.read_csv("file.txt", names=["col1"])df = df.col1.str.split(' ', expand = True)df = df.drop(df.columns[[0, 2, 3, 4, 5, 6, 7, 8, 11]], axis=1)df = df.rename(columns={ 1: 'ENC_NAME', 9: 'VC_VERSION', 10: 'OA_VERSION'})print(df)       ENC_NAME VC_VERSION OA_VERSION0    enc1001       None       None1                   KVM       4.852                  4.50       None3                  4.50       None4    enc1002       None       None5                   KVM       4.856                  4.50       None7                  4.50       None8    enc1003       None       None9                   KVM       4.8510                 4.50       None11                 4.50       None12   enc1004       None       None13                  KVM       4.8514                 4.50       None15                 4.50       None----------------- data snipped ---------------期望:   ENC_NAME OA_VERSION VC_ACTIVE VC_STDN    enc1001       4.85      4.50    4.50    enc1002       4.85      4.50    4.50    enc1003       4.85      4.50    4.50    enc1004       4.85      4.50    4.50    enc1005       4.85      4.50    4.50    enc1006       4.85      4.50    4.50    enc1007       4.85      4.50    4.50    enc1008       4.85      4.40    4.40    enc1009       4.85      4.50    4.50    enc2001       4.85      4.50    4.50    enc2002       4.85      4.50    4.50    enc2003       4.85      4.50    4.50请帮助获得熊猫。提前致谢。
查看完整描述

1 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

以下代码ENC_NAME从标题行(带=符号)和所有其他行的最后一个值中获取,假设这些行是按所需顺序排列的。然后我们分配行号和列号以及数据透视表。


优点是它不依赖于数据中的空格数。


df = pd.read_csv('file.txt', sep='\n',header=None, names=['col1'])


df['row'] = df.col1.str.contains('===').cumsum()

df['col'] = df.groupby('row').cumcount()

df['value'] = df.col1.str.extract('=== (.*) ===')

m = df.value.isna()

df.loc[m,'value'] = df.loc[m,'col1'].str.extract('(\d+\.\d+)$').values


df = df.pivot('row','col','value')

df.columns = ['ENC_NAME', 'OA_VERSION', 'VC_ACTIVE', 'VC_STDN']

结果:


    ENC_NAME OA_VERSION VC_ACTIVE VC_STDN

row                                      

1    enc1001       4.85      4.50    4.50

2    enc1002       4.85      4.50    4.50

3    enc1003       4.85      4.50    4.50

4    enc1004       4.85      4.50    4.50

5    enc1005       4.85      4.50    4.50

6    enc1006       4.85      4.50    4.50

7    enc1007       4.85      4.50    4.50

8    enc1008       4.85      4.40    4.40

9    enc1009       4.85      4.50    4.50

10   enc2001       4.85      4.50    4.50

11   enc2002       4.85      4.50    4.50

12   enc2003       4.85      4.50    4.50

13   enc2004       4.85      4.50    4.50

14   enc2005       4.85      4.50    4.50

15   enc2006       4.85      4.50    4.50

16   enc2007       4.85      4.50    4.50

17   enc2008       4.85      4.50    4.50

18   enc2009       4.85      4.50    4.50

19   enc2011       4.85      4.50    4.50

20   enc2013       4.85      4.50    4.50

21   enc3020       4.85      4.41    4.41

22   enc3021       4.85      4.41    4.41

23   enc3022       4.85      4.41    4.41

24   enc3026       4.85      4.45    4.45

25   enc3027       4.85      4.50    4.50

26   enc3028       4.85      4.50    4.50

27   enc3029       4.85      4.50    4.50

28   enc3030       4.85      4.50    4.50

29   enc3031       4.85      4.50    4.50

30   enc4021       4.85      4.41    4.41

31   enc4023       4.85      4.41    4.41

32   enc4024       4.85      4.41    4.41

33   enc4025       4.85      4.41    4.41

34   enc4026       4.85      4.50    4.50

35   enc4027       4.85      4.50    4.50

36   enc4028       4.85      4.50    4.50

37   enc4029       4.85      4.50    4.50

38   enc4030       4.85      4.50    4.50

39   enc4031       4.85      4.50    4.50

40   enc4032       4.85      4.50    4.50

41   enc4033       4.85      4.50    4.50

42   enc4034       4.85      4.50    4.50

43   enc6002       4.60       NaN     NaN

44   enc6011       4.60       NaN     NaN

45   enc6012       4.60       NaN     NaN

46   enc6013       4.60       NaN     NaN

47   enc6014       4.60       NaN     NaN

48   enc6015       4.60       NaN     NaN

49   enc6016       4.60       NaN     NaN

50   enc6017       4.60       NaN     NaN

51   enc7002       4.85       NaN     NaN

52   enc7003       4.85       NaN     NaN

53   enc7004       4.85       NaN     NaN

54   enc7009       4.85      4.50    4.50

55   enc1010       4.85      4.50    4.50

56   enc1011       4.85      4.50    4.50

57   enc1012       4.85      4.50    4.50

58   enc1013       4.85      4.50    4.50

59   enc1014       4.85      4.50    4.50

60   enc1015       4.85      4.50    4.50

61   enc1016       4.85      4.50    4.50

62   enc1017       4.85      4.50    4.50

63   enc1018       4.85      4.50    4.50

64   enc1025       4.85      4.62    4.62

65   enc1026       4.85      4.50    4.50

66   enc2010       4.85      4.50    4.50

67   enc2012       4.85      4.50    4.50

68   enc2014       4.85      4.50    4.50

69   enc2015       4.85      4.50    4.50

70   enc2016       4.85      4.50    4.50

71   enc2018       4.85      4.50    4.50

72   enc2019       4.85      4.50    4.50

73   enc2020       4.85      4.50    4.50

74   enc2021       4.85      4.50    4.50

75   enc2022       4.85      4.50    4.50

76   enc2023       4.85      4.50    4.50

77   enc3033       4.85      4.50    4.50

78   enc3034       4.85      4.50    4.50

79   enc3036       4.85      4.50    4.50

80   enc4020       4.85      4.41    4.41

81   enc4022       4.85      4.41    4.41

82   enc4035       4.85      4.50    4.50

83   enc7005       4.85      4.50    4.50

84   enc7006       4.85      4.50    4.50

85   enc7007       4.85      4.62    4.62

86   enc7008       4.85      4.62    4.62

87   enc8001       4.85      4.50    4.50

88   enc8017       4.85      4.50    4.50

89   enc8018       4.85      4.50    4.50

90   enc8019       4.85      4.50    4.50

91   enc8021       4.85      4.50    4.50

92   enc8022       4.85      4.62    4.62

93   enc8023       4.85      4.62    4.62

94   enc8024       4.85      4.62    4.62

95   enc8025       4.85      4.62    4.62

96   enc8026       4.85      4.62    4.62

97   enc8027       4.85      4.62    4.62

98   enc8028       4.85      4.62    4.62

99   enc8033       4.85      4.40    4.40



查看完整回答
反对 回复 2023-02-07
  • 1 回答
  • 0 关注
  • 74 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信