【问题标题】:Pandas DataFrame columns separatingPandas DataFrame 列分隔
【发布时间】:2019-04-02 16:42:44
【问题描述】:

我有一个大的 DataFrame,其中只有一列包含所有值。我需要将数据分成更多列。经过多次尝试和错误,我放弃并寻求您的帮助。

DataFrame 的头部如下所示: 这些行是一个系列对象。不是价值观

                                                        column1
    ---------------------------------------------------------------------
    MultiIndex1  | 1.00   2.00   3.00   4.00   5.00   6.00   7.00
                 | 1.00   2.00   3.00   4.00   5.00   6.00   7.00
                 | 1.00   2.00   3.00   4.00   5.00   6.00   7.00
                 | 1.00   2.00   3.00   4.00   5.00   6.00   7.00
                 | 1.00   2.00   3.00   4.00   5.00   6.00   7.00
                 | 1.00   2.00   3.00   4.00   5.00   6.00   7.00

我想要的输出应该是这样的:

                 column1|column2|column3|column4|column5|column6|column7
    ---------------------------------------------------------------------
    MultiIndex1  | 1.00 |  2.00 |  3.00 |  4.00 |  5.00 |  6.00 |  7.00
                 | 1.00 |  2.00 |  3.00 |  4.00 |  5.00 |  6.00 |  7.00
                 | 1.00 |  2.00 |  3.00 |  4.00 |  5.00 |  6.00 |  7.00
                 | 1.00 |  2.00 |  3.00 |  4.00 |  5.00 |  6.00 |  7.00
                 | 1.00 |  2.00 |  3.00 |  4.00 |  5.00 |  6.00 |  7.00
                 | 1.00 |  2.00 |  3.00 |  4.00 |  5.00 |  6.00 |  7.00

我尝试过: df.columns = ['col1','col2','col3','col4','col5'...]

我试过把它变成一个系列,然后再变成一个 df。

尝试应用 .str.split 函数。

很多切片和连接,但没有成功。

我们将不胜感激。 谢谢!

这是我的数据集的前几行,例如:

日期和 AALR3 是 Row MultiIndex

2019-01-02;AALR3;0000000020; 000000000013.300000; 000000000000000001,0:00:04.961; 1; 2019-01-02; 000086597137782; 000086597137782; 000000000310091; 2; 000086597142909; 000000000310092; 1; 0; 00000072; 00000174 2019-01-02;AALR3;0000000010; 000000000013.310000; 000000000013.310000; 10:00:04.961; 1; 2019-01-02; 000086597135827; 000086597135827; 000086597135827; 00000000000310088; 2; 000086597142909; 000086597142909; 000000000310089; 00000000000310089; 1; 0; 00000120; 00000174 2019-01-02;AALR3;0000000050; 000000000013.390000; 000000000013.390000; 10:11:40.214; 1; 2019-01-02; 000086597182855; 000086597182855; 000086597182855; 000086597182855; 1; 2019-01-02; 000086597151579; 000086597151579; 000000000400274; 2; 0; 00000058; 00000008 2019-01-02;AALR3;0000000040; 000000000013.380000; 0000000000003.380000; 10:11:40.14; 1; 2019-01-02; 000086597182855; 000086597182855; 000086597182855; 00000000000400271; 1; 2019-01-02; 000086597151578; 0000865971578; 000000000400272; 2; 0; 00000058; 00000174 2019-01-02;AALR3 ;0000000030; 000000000013.380000; 000000000013.380000; 10:11:4014; 1; 2019-01-02; 000086597182855; 000086597182855; 000086597182855; 1; 2019-01-02; 000086597151189; 000086597151189; 000086597151189; 000000000400270; 2; 0; 00000058; 0000030803

我正在阅读它:

    pd.read_csv('//path_to_file', sep=';')

我想这样命名列。

    df.columns = ['Session Date','Instrument Symbol','Trade Number','Trade Price','Traded Quantity',
          'Trade Time','Trade Indicator','Buy Order Date','Sequential Buy Order Number',
          'Secondary Order ID - Buy Order','Aggressor Buy Order Indicator','Sell Order Date',
         'Sequential Sell Order Number','Secondary Order ID - Sell Order','Aggressor Sell Order Indicator',
          'Cross Trade Indicator','Buy Member','Sell Member']

更新:

解决方案很有效,非常感谢。

I is almost the way i want it. Is there a way to make the duplicate indexes a MultiIndex as well? I managed to make the dates, but not the symbol. Thanks

【问题讨论】:

  • 数据如何被读入数据框(例如 csv),您能否提供原始数据的样本?

标签: python pandas dataframe indexing


【解决方案1】:

您看到的是 MultiIndex Dataframe ,而您正在寻找的是 SingleIndex dataframe , 试试

df = df.reset_index()
df.columns = ['col1','col2','col3','col4','col5','col6','col7']

【讨论】:

  • 这行得通,但搞砸了我的行 MultiIndex。哈哈。但更近一步。谢谢!
  • @OmarOmeiri 如果我的回答解决了您的问题,请将其标记为已回答:)
  • 您知道如何将重复的符号也加入到 MultiIndex 中吗?我发了一张照片
  • 我觉得你可以试试,pandas.merge(dataframe1 , dataframe2 , on="SYMBOL")
【解决方案2】:

试试这个-

your_df = pd.DataFrame(df.column1.str.split(' ',1).tolist(), columns = ['col1','col2','col3','col4','col5','col6','col7'])
print(your_df)

【讨论】:

  • 我收到此错误:AssertionError: 18 列已通过,传递的数据有 1 列
猜你喜欢
  • 2016-09-10
  • 2023-03-14
  • 2020-09-26
  • 1970-01-01
  • 2019-03-22
  • 1970-01-01
  • 2019-02-08
  • 2016-02-17
相关资源
最近更新 更多