python如何输出两列数据_Python-如何将一列分为两列?
小編典典
對于以下簡單情況:
我有一個帶有定界符的文本列,我想要兩列
最簡單的解決方案是:
df['A'], df['B'] = df['AB'].str.split(' ', 1).str
或者,你可以使用以下方法自動為拆分的每個條目創建一個帶有一列的DataFrame:
df['AB'].str.split(' ', 1, expand=True)
expand=True如果字符串的分割數不一致,并且要None替換缺失的值,則必須使用。
請注意,無論哪種情況,.tolist()都不需要該方法。都不是zip()。
詳細地:
安迪·海登(Andy Hayden)的解決方案最能證明該str.extract()方法的強大功能。
但是對于在已知分隔符上的簡單拆分(例如,用破折號拆分或通過空格拆分),該.str.split()方法就足夠了1。它對字符串的一列(系列)進行操作,并返回列表的一列(系列):
>>> import pandas as pd
>>> df = pd.DataFrame({'AB': ['A1-B1', 'A2-B2']})
>>> df
AB
0 A1-B1
1 A2-B2
>>> df['AB_split'] = df['AB'].str.split('-')
>>> df
AB AB_split
0 A1-B1 [A1, B1]
1 A2-B2 [A2, B2]
1:如果不確定.str.split()do 的前兩個參數是什么,我建議為該方法的純Python版本使用docs 。
但是你如何去做:
包含兩個元素的列表的列
至:
兩列,每列包含列表的相應元素?
好吧,我們需要仔細看看.str列的屬性。
這是一個神奇的對象,用于收集將列中的每個元素視為字符串的方法,然后在每個元素中盡可能有效地應用相應的方法:
>>> upper_lower_df = pd.DataFrame({"U": ["A", "B", "C"]})
>>> upper_lower_df
U
0 A
1 B
2 C
>>> upper_lower_df["L"] = upper_lower_df["U"].str.lower()
>>> upper_lower_df
U L
0 A a
1 B b
2 C c
但是它還有一個“索引”接口,用于通過其索引獲取字符串的每個元素:
>>> df['AB'].str[0]
0 A
1 A
Name: AB, dtype: object
>>> df['AB'].str[1]
0 1
1 2
Name: AB, dtype: object
當然,.str只要可以對其建立索引,則此索引接口并不真正在乎它所索引的每個元素是否實際上是字符串,因此:
>>> df['AB'].str.split('-', 1).str[0]
0 A1
1 A2
Name: AB, dtype: object
>>> df['AB'].str.split('-', 1).str[1]
0 B1
1 B2
Name: AB, dtype: object
然后,只需利用Python元組對可迭代對象進行拆包即可
>>> df['A'], df['B'] = df['AB'].str.split('-', 1).str
>>> df
AB AB_split A B
0 A1-B1 [A1, B1] A1 B1
1 A2-B2 [A2, B2] A2 B2
當然,從拆分一列字符串中獲取一個DataFrame非常有用,以至于該.str.split()方法可以通過expand=True參數為你做到這一點:
>>> df['AB'].str.split('-', 1, expand=True)
0 1
0 A1 B1
1 A2 B2
因此,完成我們想要的工作的另一種方法是:
>>> df = df[['AB']]
>>> df
AB
0 A1-B1
1 A2-B2
>>> df.join(df['AB'].str.split('-', 1, expand=True).rename(columns={0:'A', 1:'B'}))
AB A B
0 A1-B1 A1 B1
1 A2-B2 A2 B2
該expand=True版本雖然較長,但與元組拆包方法相比具有明顯的優勢。元組解壓縮不能很好地處理不同長度的拆分:
>>> df = pd.DataFrame({'AB': ['A1-B1', 'A2-B2', 'A3-B3-C3']})
>>> df
AB
0 A1-B1
1 A2-B2
2 A3-B3-C3
>>> df['A'], df['B'], df['C'] = df['AB'].str.split('-')
Traceback (most recent call last):
[...]
ValueError: Length of values does not match length of index
>>>
但是expand=True通過放置None沒有足夠“拆分”的列來很好地處理它:
>>> df.join(
... df['AB'].str.split('-', expand=True).rename(
... columns={0:'A', 1:'B', 2:'C'}
... )
... )
AB A B C
0 A1-B1 A1 B1 None
1 A2-B2 A2 B2 None
2 A3-B3-C3 A3 B3 C3
2020-02-11
總結
以上是生活随笔為你收集整理的python如何输出两列数据_Python-如何将一列分为两列?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java判断字符串是否相同
- 下一篇: 基于特征选择的局部敏感哈希位选择算法