【问题标题】:How can I append values from an existing dataframe to an empty dataframe in for loop? [duplicate]如何将现有数据帧中的值附加到 for 循环中的空数据帧? [复制]
【发布时间】:2019-05-06 07:35:20
【问题描述】:

我有一个数据框:

Index   city_code   date   sector   price
1   1           2010-01 A   50000
2   1           2010-01 B   100000
3   2           2010-01 A   150000
4   3           2010-01 A   322222
5   1           2010-01 C   124555
6   2           2010-01 C   30000
7   2           2010-01 B   20000
8   1           2010-02 A   45000
9   1           2010-02 B   120000
10  2           2010-02 A   30000
11  3           2010-02 A   1222400
12  1           2010-02 C   20000
13  2           2010-02 C   50000
14  2           2010-02 B   360000

我想根据扇区将数据追加到不同的数据帧中。

我尝试使用以下代码解决此问题。但不幸的是,它不起作用。

df = pd.read_csv('dataset.csv', sep=';')

area_list = pd.DataFrame(df['sector'].unique())
columns = df.columns
df_A = pd.DataFrame(columns=columns)
df_B = pd.DataFrame(columns=columns)
df_C = pd.DataFrame(columns=columns)

for i in area_list:
    x = df[df['sector'] == i]
    if i == 'A':
        df_A.append(x)
    elif i == 'B':
        df_B.append(x)
    elif i == 'C':
        df_C.append(x)

此代码不会将值附加到空数据帧(df_Adf_Bdf_C)。我该如何解决这个问题?

【问题讨论】:

  • 您尝试过什么调试问题?为什么不检查这些极端情况?
  • 但我想创建包含每个城市值的不同数据框。这个解决方案不能解决我的问题。

标签: python pandas dataframe for-loop


【解决方案1】:

您可以通过这种方式按扇区属性分隔数据。

df_A = df[df['sector']=='A']
df_B = df[df['sector']=='B']
df_C = df[df['sector']=='C']

或者

for sector, df_sector in df.groupby('sector'):
    if (sector == 'A'):
        df_A = df_sector
    elif (sector == 'B'):
        df_B = df_sector
    elif (sector == 'C'):
        df_C = df_sector

>>> import pandas as pd
>>> df = pd.read_csv('dataset.csv')
>>> df.head()
   city        date sector        price
0     1  2010-01-01      A   53675300.0
1     1  2010-01-01      B   13415070.0
2     1  2010-01-01      C  474007000.0
3     1  2010-01-01      D  218028700.0
4     1  2010-01-01      E    2073598.0
>>> for sector, df_sector in df.groupby('sector'):
...     if (sector == 'A'):
...             df_A = df_sector
...     elif (sector == 'B'):
...             df_B = df_sector
...     elif (sector == 'C'):
...             df_C = df_sector
...     elif (sector == 'D'):
...             df_D = df_sector
...     else:
...             df_E = df_sector
... 
>>> df_A
   city        date sector       price
0     1  2010-01-01      A  53675300.0
>>> df_B
   city        date sector       price
1     1  2010-01-01      B  13415070.0
>>> df_C
   city        date sector        price
2     1  2010-01-01      C  474007000.0
>>> df_D
   city        date sector        price
3     1  2010-01-01      D  218028700.0
>>> df_E
   city        date sector      price
4     1  2010-01-01      E  2073598.0
>>> 

【讨论】:

  • 我试过了,但 df_A、df_B 等都是空数据帧。
  • 如果数据集被正确读取,查询应该运行。
  • df = pd.read_csv('dataset.csv', sep=';') df['price'] = df['price'].str.replace(',','. ') df['price'] = df['price'].astype(float) # tarih的数据类型列是object。我们将其数据类型转换为日期时间 df['date'] = pd.to_datetime(df['date']) # 我们删除扇区 = 0 的行 df.drop( df[ df['sector'] == ' 0' ].index , inplace=True) df_A = df[df['sector']=='A'] df_B = df[df['sector']=='B'] df_C = df[df['sector ']=='C'] #and df_A, df_B etc. Type: DataFrame, Size: (0,4), Value: 列名:city, date, sector, price..换句话说df__A, df_B etc.是空数据框
  • 是否发送未按扇区属性划分的数据集?
  • 1) df = pd.read_csv('dataset.csv', sep=';') 2) df['price'] = df['price'].str.replace(', ','.') 3) df['price'] = df['price'].astype(float) 4) df['date'] = pd.to_datetime(df['date'])
猜你喜欢
  • 2016-01-31
  • 2016-12-19
  • 2017-05-19
  • 2015-04-05
  • 2020-04-25
  • 2021-12-12
  • 2017-10-21
  • 2019-10-15
  • 1970-01-01
相关资源
最近更新 更多