【问题标题】:Finding string length and append with multiple column in dictionary format from csv in python从python中的csv中查找字符串长度并附加字典格式的多列
【发布时间】:2021-11-03 06:39:51
【问题描述】:

我的数据框 -

基本上-我想附加房屋和地区列

  • 然后找到两列的字符串长度;在这种情况下 House 263 --> (0, 8), dhaka (10,14), area(16,21)
  • 另外,附上它们的相关标签(label1 列和 label2、label3)
  • 为所有行执行此操作 我的预期输出-[('House 263 dhaka', {'entities': [[(0, 8)], 'holding_number'], [(10,14), 'district'], [(16,21), 'area']})

我的代码-

TRAIN_DATA= [(k, {'entities': [[0, len(k.rpartition(' ')[0]) - 1, v['label1']], [k.rfind(' ') + 1, len(k) - 1, v['label2']], [k.rfind(' ') + 1, len(k) - 1, v['label3']]]}) for k, v in df.set_index(['house', 'district', 'area']).set_axis(df[['house', 'district', 'area']].agg(' '.join, axis=1)).to_dict('index').items()]
print(TRAIN_DATA)

我无法在 area 列下找到字符串的长度。我怎样才能找到它?另外,如果我有另一个这样的 6/7 列怎么办?谁能解释一下?

输入数据框- {'house':{0:'House 263',1:'House 31',2:'House 193/A'},'label1':{0:'holding_number',1:'holding_number',2:' holding_number'},'district':{0:'dhaka',1:'comilla',2:'chittagong'},'label2':{0:'district',1:'district',2:'district' }, 'area': {0: 'mirpur', 1: 'badda', 2: 'dohs'}, 'label3': {0: 'area', 1: 'area', 2: 'area'}}

【问题讨论】:

  • 您可以将输入数据框作为文本提供吗? (使用df.to_dict() 并将其粘贴到您的答案中)
  • 我已经添加了

标签: python pandas list dataframe dictionary


【解决方案1】:

您可以使用以下自定义函数:

import numpy as np
def get_lengths(s):
    cols = s.index[::2]
    #labels = s.index[1::2]
    l = list(np.cumsum(list(map(len, s[cols]))))
    l = list(zip([0]+l[:-1], l))
    
    return (' '.join(s[cols]), {'entities': [list(zip(l, cols))]})

df.apply(get_lengths, axis=1)

第一行的示例输出:

('House 263 dhaka mirpur',
 {'entities': [[((0, 9), 'house'),
    ((9, 14), 'district'),
    ((14, 20), 'area')]]})

【讨论】:

  • 您能否解释一下如果我还有另一列,例如“subdistrict”和“label4”,那我该怎么办?
  • 如何将其保存为 json 格式?我收到此错误 TypeError: write() argument must be str, not Series
  • 使用系列的.to_json 方法。自定义函数有效吗?
  • 我得到这样的输出 {"0":["House 263 dhaka mirpur",{"entities":[[[[0,9],"label1"],[[9, 14],"label2"],[[14,20],"label3"]]]}] 这里label1应该是holding_number, label2 -> district, label3-> area
  • 这不是您在问题中写的,然后将代码中的labels 替换为cols
猜你喜欢
  • 2021-11-03
  • 2015-12-11
  • 1970-01-01
  • 1970-01-01
  • 2014-03-30
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
相关资源
最近更新 更多