熊猫str.split()在循环中不起作用(Jupyter)

时间:2018-11-22 05:23:13

标签: python pandas for-loop split jupyter-notebook

我正在使用体育得分的Pandas DataFrame,其中包含系列“得分”。此系列中的所有项目都将两个团队的得分都包含在一个字符串中,并用连字符隔开,例如,没有空格

('25-7', '6-2', ...)

我正在尝试使用Jupyter笔记本将每个值分成2个单独的列表:left_score和right_score。我为Series使用了str.split('-')方法,该方法应该将每个字符串转换为一个列表,以便我的分数为

['25','7'], ['6','2']

但是,当我运行它时,它会执行,但是它不能识别连字符,并且会将整个字符串作为索引0返回。

我尝试使用'-'和“-”没什么区别。我还尝试使用for循环和Python核心str.split()。核心功能按预期在Jupyter中的独立字符串上起作用,但是在循环中运行时,它将再次返回整个字符串作为唯一元素。

我也尝试过直接访问Series中的字符串,但是该功能仍然失败。以下应返回“ 25”,但返回“ 25-7”。

dataframe_name.Score.str.split("-").str[0][0]`

真的很喜欢使用Pandas和DataFrames,但是语法却是一个挑战-任何想法都值得赞赏。

编辑:按要求添加示例代码。请注意,这是跨多个Jupyter单元的,但是我要按顺序执行它们。

在[1]中:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

df = pd.read_csv('./file_name.csv', sep='\t')

df.head(3)

出[1]:

df
_    Score
0    25-7
1    6-2
2    4-4

在[2]中:

# Thanks to user Pygo, I attempted the suggested solution to no avail:
df['Score'].str.split('-',n=1,expand=False).values.tolist()

出[2]:

[['25-7'],
['6-2'],
['4-4'],
... ]
  • Jupyter Notebook版本5.5.0
  • Anaconda版本5.2.0
  • Python版本3.6.5
  • Pandas版本0.23.0
  • numpy版本1.14.3

是否可能存在版本或引用冲突?

EDIT2:

我尝试遍历字符串中的每个字母以手动执行拆分功能,现在发现.join()+=for循环中也不起作用。我在哪里可以找到Jupyter Notebook循环中的Pandas和/或Core String故障?

2 个答案:

答案 0 :(得分:1)

我们可以使用split函数在每个Score处拆分"-"列。然后将参数设置为1,因为单个字符串中的最大分隔数将为1。expand参数为False(If False, return Series/Index/DataFrame)。

示例数据框:

df
   Score
0   25-7
1    6-2
2  19-22

预期结果:使用str.split + values.tolist()

df['Score'].str.split('-', n=1, expand=False).values.tolist()
[['25', '7'], ['6', '2'], ['19', '22']]

希望这将对所提供的最少信息有所帮助。

答案 1 :(得分:0)

我尝试以-字符进行解析的系列由于对if letter == '-'的故障排除布尔条件而失败……我意识到我系列中的数据还有另一种连字符( m-连字符vs n-连字符;一个是“宽”字符,另一个是“正常”字符。)在Jupyter中,这些看起来难以区分-如果有技巧在笔记本中辨别这些字符,我很想学习它!