【问题标题】:Python - take out the data inside cell of dataframe to another cellsPython - 将数据框单元格内的数据取出到另一个单元格
【发布时间】:2020-08-27 23:19:24
【问题描述】:

这是数据框单个单元格中的数据,有 14 列。单元格是列的元素。有 45k+ 这种细胞,手动做简直是地狱。

one cell data

我想用这个单元格做 3 件事:

  1. 将带有地址、状态、邮编的文本部分移至另一列;
  2. 删除单元格的hooks();
  3. 将经度和纬度分开 2 列。

怎么可能?

【问题讨论】:

    标签: python pandas dataframe data-science data-analysis


    【解决方案1】:

    下面是一个简单的工作示例,包含 2 个数据点:

    text1 = """30881 EKLUTNA LAKE RD
    CHUGIAK, AK 99567
    (61.4478, -149.3136)"""
    
    text2 = """30882 FAKE STR
    CHUGIAK, AK 98817
    (43.4478, -119.3136)"""
    
    d = {'col1': [text1, text2]}
    
    df = pd.DataFrame(data=d)
    
    def fix(row):
      #We split the text by newline
      address, cp, latlong =  row.col1.split('\n')
    
      #We get the latitude and longitude by splitting by a comma
      latlong_vec = latlong[1:-1].split(',')
    
      #This part isn't really necessary but we create the variables for claity
      lat = float(latlong_vec[0])
      long = float(latlong_vec[1])
    
      return pd.Series([address + ". " + cp, lat, long])
    
    
    df[['full address', 'lat', 'long']] = df.apply(fix, axis = 1)
    

    3 个新列的输出:

    df['full address']
    0    30881 EKLUTNA LAKE RD. CHUGIAK, AK 99567
    1           30882 FAKE STR. CHUGIAK, AK 98817
    
    df['lat']
    
    0    61.4478
    1    43.4478
    Name: lat, dtype: float64
    
    df['long']
    
    0   -149.3136
    1   -119.3136
    Name: long, dtype: float64
    

    名称:完整地址,dtype:对象

    【讨论】:

    • 但是有个小问题 latlong = latlong[1:-1].split(',') NameError: name 'latlong' is not defined
    • 您确定复制正确吗?我在上一行中定义了 latlong。另外,当它是“latlong_vec = latlong[1:-1].split(',')”时,您写了“latlong = latlong[1:-1].split(',')”。也就是说,我正在创建一个新的变量 latlong_vec。
    • 另外,请注意:我的代码假定您的列没有丢失数据(例如,所有 (lat, long) 对都存在)。如果不是这种情况,则需要修改 fix() 函数并添加一些 try/catch 子句或一些 IF 来处理边界情况。
    • 我确定复制正确,但也确定问题出在我身上。将尝试更深入地挖掘它。因为你展示了路线图,我正在使用我的变量,但在某个地方我错了。非常感谢 Guillermo 的详细回答!
    猜你喜欢
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    • 2018-03-15
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    相关资源
    最近更新 更多