python - 如何使用混合数据类型值迭代 DF[ 'column']?

标签 python pandas dataframe

我导入了一个 Excel 文件,但在使用 pandas 迭代时遇到了问题。 导入后的数据如下所示。

Acct            Time        Typ     Name   
01/02/2018      NaN         NaN     NaN  
52              07:58:34    1       John  
53              07:58:35    1       Jack   
54              07:58:35    1       Ron  
55              07:58:35    1       Lux   
01/03/2018      NaN         NaN     NaN  
79              12:39:25    1       Mike    
01/06/2018      NaN         NaN     NaN         
371             12:15:47    1       Eric   
422             17:07:33    1       Shawn  
01/07/2018      NaN         NaN     NaN         
492             12:43:54    1       George

我想迭代第一列的字符串 ("Acct"),检查它是 日期 还是 数字

我在新数据框中创建了一个附加列,并尝试填充日期字段,但出现了一些系列错误。

期望这样的输出:

Date_New        Acct        Time        Typ     Name 

01/02/2018      52          07:58:34    1       John  
01/02/2018      53          07:58:35    1       Jack   
01/02/2018      54          07:58:35    1       Ron  
01/02/2018      55          07:58:35    1       Lux   
01/03/2018      79          12:39:25    1       Mike    
01/06/2018      371         12:15:47    1       Eric   
01/06/2018      422         17:07:33    1       Shawn  
01/07/2018      492         12:43:54    1       George

如果有人能给我一些指示,因为我是 pandas 的新手,我将不胜感激。

最佳答案

我建议不要迭代,而是使用 pandas 函数。要查找正确的日期,您可以使用 pd.to_datetimeAcct 列转换为正确的日期。 ,并使用参数 errors = 'coerce'。非日期将转为空 (NaT)。然后,使用 ffill 向前填充该列并添加正确的日期。 ,并通过索引删除 TimeTypName 列全部为 NaN 的列。最后您可以重新排序您的列:

# Find proper dates, create new column:
df['Date_New'] = pd.to_datetime(df['Acct'], errors='coerce')
# Fill non-valid dates:
df['Date_New'].ffill(inplace=True)
# Get rid of `NaN` rows:
df = df[~df[['Time','Typ', 'Name']].isnull().all(1)]
# Reorder Columns
df = df[['Date_New', 'Acct', 'Time', 'Typ', 'Name']]

>>> df
     Date_New Acct      Time  Typ    Name
1  2018-01-02   52  07:58:34  1.0    John
2  2018-01-02   53  07:58:35  1.0    Jack
3  2018-01-02   54  07:58:35  1.0     Ron
4  2018-01-02   55  07:58:35  1.0     Lux
6  2018-01-03   79  12:39:25  1.0    Mike
8  2018-01-06  371  12:15:47  1.0    Eric
9  2018-01-06  422  17:07:33  1.0   Shawn
11 2018-01-07  492  12:43:54  1.0  George

进一步说明:

为了更容易理解,以下是每个步骤后的结果:

>>> df['Date_New'] = pd.to_datetime(df['Acct'], errors='coerce')
>>> df
          Acct      Time  Typ    Name   Date_New
0   01/02/2018       NaN  NaN     NaN 2018-01-02
1           52  07:58:34  1.0    John        NaT
2           53  07:58:35  1.0    Jack        NaT
3           54  07:58:35  1.0     Ron        NaT
4           55  07:58:35  1.0     Lux        NaT
5   01/03/2018       NaN  NaN     NaN 2018-01-03
6           79  12:39:25  1.0    Mike        NaT
7   01/06/2018       NaN  NaN     NaN 2018-01-06
8          371  12:15:47  1.0    Eric        NaT
9          422  17:07:33  1.0   Shawn        NaT
10  01/07/2018       NaN  NaN     NaN 2018-01-07
11         492  12:43:54  1.0  George        NaT

>>> df['Date_New'].ffill(inplace=True)
>>> df
          Acct      Time  Typ    Name   Date_New
0   01/02/2018       NaN  NaN     NaN 2018-01-02
1           52  07:58:34  1.0    John 2018-01-02
2           53  07:58:35  1.0    Jack 2018-01-02
3           54  07:58:35  1.0     Ron 2018-01-02
4           55  07:58:35  1.0     Lux 2018-01-02
5   01/03/2018       NaN  NaN     NaN 2018-01-03
6           79  12:39:25  1.0    Mike 2018-01-03
7   01/06/2018       NaN  NaN     NaN 2018-01-06
8          371  12:15:47  1.0    Eric 2018-01-06
9          422  17:07:33  1.0   Shawn 2018-01-06
10  01/07/2018       NaN  NaN     NaN 2018-01-07
11         492  12:43:54  1.0  George 2018-01-07

>>> df = df[~df[['Time','Typ', 'Name']].isnull().all(1)]
>>> df
   Acct      Time  Typ    Name   Date_New
1    52  07:58:34  1.0    John 2018-01-02
2    53  07:58:35  1.0    Jack 2018-01-02
3    54  07:58:35  1.0     Ron 2018-01-02
4    55  07:58:35  1.0     Lux 2018-01-02
6    79  12:39:25  1.0    Mike 2018-01-03
8   371  12:15:47  1.0    Eric 2018-01-06
9   422  17:07:33  1.0   Shawn 2018-01-06
11  492  12:43:54  1.0  George 2018-01-07

关于python - 如何使用混合数据类型值迭代 DF[ 'column']?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52304546/

相关文章:

python - 从 OneHotEncoder 获取对应的特征

python - 循环创建多个图形后如何保存它们?

python - 我的代码中出现 'list index out of range' 错误

python - 如何在 Python 中处理多个相同的未阻塞信号?

python - 如何使用每个向量条目来填充数据帧中单独组的 NAN

python - Pandas ( python ): max in columns define new value in new column

python - 加速 pandas csv 读取和后续的 downcast

Python:将字符串数组转换为数据框中的int数组

python - 创建具有不同大小列的 Pandas Dataframe

Python - Pandas - DataFrame 减少行数