【问题标题】:Loading in dataframes with columns spanning multiple lines using pd.read_clipboard使用 pd.read_clipboard 加载列跨越多行的数据帧
【发布时间】:2018-02-03 14:25:22
【问题描述】:

给定来自another question的数据集:

    user                             item  \
0  b80344d063b5ccb3212f76538f3d9e43d87dca9e          The Cove - Jack Johnson   
1  b80344d063b5ccb3212f76538f3d9e43d87dca9e  Entre Dos Aguas - Paco De Lucia   
2  b80344d063b5ccb3212f76538f3d9e43d87dca9e            Stronger - Kanye West   
3  b80344d063b5ccb3212f76538f3d9e43d87dca9e    Constellations - Jack Johnson   
4  b80344d063b5ccb3212f76538f3d9e43d87dca9e      Learn To Fly - Foo Fighters   

rating  
0       1  
1       2  
2       1  
3       1  
4       1 

有没有办法以预期的格式加载此类数据,而无需手动将所有内容移动到同一行?

【问题讨论】:

  • 即使我也有这个问题。将所有内容移到一条线上是一项艰巨的工作。
  • 撞这个...
  • @coldspeed 您对我的解决方案有什么建议吗?

标签: python pandas dataframe clipboard


【解决方案1】:

其中一种方法是基于\n\n 进行拆分,然后创建单独的数据帧,然后将它们连接起来。即

#Bit of code from https://stackoverflow.com/questions/45740537/copying-multiindex-dataframes-with-pd-read-clipboard

def read_clipboard_split(index_names_row=None, **kwargs):
    encoding = kwargs.pop('encoding', 'utf-8')

    # only utf-8 is valid for passed value because that's what clipboard
    # supports
    if encoding is not None and encoding.lower().replace('-', '') != 'utf8':
        raise NotImplementedError(
            'reading from clipboard only supports utf-8 encoding')

    from pandas import compat, read_fwf
    from pandas.io.clipboard import clipboard_get
    from pandas.io.common import StringIO

    data = clipboard_get()
    items = data.split("\n\n")
    k = []
    for i in items:
        k.append(read_fwf(StringIO(i), **kwargs))
    df = pd.concat(k,axis=1)
    return df

read_clipboard_split()

示例运行:

用户\ 0 b80344d063b5ccb3212f76538f3d9e43d87dca9e 1 b80344d063b5ccb3212f76538f3d9e43d87dca9e 2 b80344d063b5ccb3212f76538f3d9e43d87dca9e 3 b80344d063b5ccb3212f76538f3d9e43d87dca9e 4 b80344d063b5ccb3212f76538f3d9e43d87dca9e 评分 0 1 1 2 2 1 3 1 4 1

输出:

未命名:0 个用户 \ 未命名:0 评分 0 0 b80344d063b5ccb3212f76538f3d9e43d87dca9e 0 1 1 1 b80344d063b5ccb3212f76538f3d9e43d87dca9e 1 2 2 2 b80344d063b5ccb3212f76538f3d9e43d87dca9e 2 1 3 3 b80344d063b5ccb3212f76538f3d9e43d87dca9e 3 1 4 4 b80344d063b5ccb3212f76538f3d9e43d87dca9e 4 1

【讨论】:

  • 似乎生成了一些虚假列。
  • 是的,需要对数据进行位清理。
猜你喜欢
  • 2018-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-29
  • 2015-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多