第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將列附加到填充相同布爾值的數(shù)據(jù)幀的最佳方法是什么

將列附加到填充相同布爾值的數(shù)據(jù)幀的最佳方法是什么

慕斯王 2021-06-26 07:24:57
給定一個數(shù)據(jù)框,如下所示:df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],                'B': ['B0', 'B1', 'B2'],                'C': ['C0', 'C1', 'C2']},                index=[0, 1, 2])   A   B   C0  A0  B0  C01  A1  B1  C12  A2  B2  C2 我想添加一個用值 False 初始化的列“D”。列“D”將用于數(shù)據(jù)幀的未來處理:    A   B   C      D0  A0  B0  C0  False1  A1  B1  C1  False2  A2  B2  C2  False我根據(jù) df1 索引生成了一個 False 值列表,并用它來創(chuàng)建一個 df2,然后將它與 df1 連接起來:Dlist = [False for item in list(range(len(df1.index)))]d = {'D':Dlist}df2 = pd.DataFrame(d, index = df1.index)result = pd.concat([df1, df2], axis=1, join_axes=[df1.index])幾個問題:第一行中的列表理解需要如此參與嗎?我嘗試了以下操作,認為 'df1.index' 就像列表一樣。它沒有用。Dlist = [False for item in df1.index]更廣泛地說,有沒有更好的方法來使用數(shù)據(jù)框操作來做到這一點?如果我正在處理一個包含 df1 數(shù)據(jù)的“csv”文件,我可以在生成數(shù)據(jù)幀之前輕松地將“D”添加到文件中。在哲學方面,在處理數(shù)據(jù)時是否不可避免地修改數(shù)據(jù)幀或它們來自的“csv”文件?在處理非常大的文件中的數(shù)據(jù)時,它當然看起來不太好。
查看完整描述

1 回答

?
冉冉說

TA貢獻1877條經(jīng)驗 獲得超1個贊

您可以只使用基于索引的分配:


In [16]: df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],

    ...:                 'B': ['B0', 'B1', 'B2'],

    ...:                 'C': ['C0', 'C1', 'C2']},

    ...:                 index=[0, 1, 2])


In [17]: df1

Out[17]:

    A   B   C

0  A0  B0  C0

1  A1  B1  C1

2  A2  B2  C2


In [18]: df1['D'] = False


In [19]: df1

Out[19]:

    A   B   C      D

0  A0  B0  C0  False

1  A1  B1  C1  False

2  A2  B2  C2  False

如果您不想修改原始數(shù)據(jù)框,也可以使用.assignwhich返回一個新的數(shù)據(jù)框:


In [20]: df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],

    ...:                 'B': ['B0', 'B1', 'B2'],

    ...:                 'C': ['C0', 'C1', 'C2']},

    ...:                 index=[0, 1, 2])


In [21]: df1

Out[21]:

    A   B   C

0  A0  B0  C0

1  A1  B1  C1

2  A2  B2  C2


In [22]: df1.assign(D=False)

Out[22]:

    A   B   C      D

0  A0  B0  C0  False

1  A1  B1  C1  False

2  A2  B2  C2  False


In [23]: df1

Out[23]:

    A   B   C

0  A0  B0  C0

1  A1  B1  C1

2  A2  B2  C2

pd.concat在這里使用真的沒有用,您可以簡單地分配列表!無論哪種方式,它仍然要慢得多:


In [44]: import timeit


In [45]: setup = 'import pandas as pd; df = pd.DataFrame({"a":list(range(100000))})'


In [46]: lstcomp = "df['D'] = [False for item in range(len(df.index))]"


In [47]: assgnmt = "df['D'] = False"


In [48]: timeit.timeit(lstcomp, setup, number=100)

Out[48]: 0.6879564090049826


In [49]: timeit.timeit(assgnmt, setup, number=100)

Out[49]: 0.008814844011794776

至于你的列表理解,沒有必要,但它絕對過于復雜。您說您嘗試迭代索引,但“它不起作用”,但您從未解釋過它是如何不起作用的。這個對我有用:


In [24]: [False for item in list(range(len(df1.index)))]

Out[24]: [False, False, False]


In [25]: [False for item in df1.index]

Out[25]: [False, False, False]

請注意,您的倍加低效的,因為它要求list的上range對象,它創(chuàng)建了一個完整列表,而不是充分利用range的固定內(nèi)存的行為(更不用提迭代兩次)。


查看完整回答
反對 回復 2021-06-29
  • 1 回答
  • 0 關(guān)注
  • 163 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號