使用pandas在数据框中追加一个空行

时间:2016-10-12 12:09:35

标签: python python-2.7 pandas

我试图在数据帧的末尾附加一个空行,但是无法这样做,甚至试图理解pandas如何使用追加函数并且仍然没有得到它。

以下是代码:

SELECT id FROM scholars

有两列和随机数行。

用"打印f" for for loop i得到这个:

import pandas as pd

excel_names = ["ARMANI+EMPORIO+AR0143-book.xlsx"]
excels = [pd.ExcelFile(name) for name in excel_names]
frames = [x.parse(x.sheet_names[0], header=None,index_col=None).dropna(how='all') for x in excels]
for f in frames:
    f.append(0, float('NaN'))
    f.append(2, float('NaN'))

8 个答案:

答案 0 :(得分:13)

您可以通过将系列附加到数据框来添加它,如下所示。我假设您想要添加仅包含“Nan”的行。 您可以先使用Nan创建一个Series对象。确保在-Index参数中定义“Series”对象时指定列。 您可以将其附加到DF。希望它有所帮助!

from numpy import nan as Nan
import pandas as pd

>>> df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
...                     'B': ['B0', 'B1', 'B2', 'B3'],
...                     'C': ['C0', 'C1', 'C2', 'C3'],
...                     'D': ['D0', 'D1', 'D2', 'D3']},
...                     index=[0, 1, 2, 3])

>>> s2 = pd.Series([Nan,Nan,Nan,Nan], index=['A', 'B', 'C', 'D'])
>>> result = df1.append(s2)
>>> result
     A    B    C    D
0   A0   B0   C0   D0
1   A1   B1   C1   D1
2   A2   B2   C2   D2
3   A3   B3   C3   D3
4  NaN  NaN  NaN  NaN

答案 1 :(得分:5)

使用pandas.DataFrame.append()添加新的pandas.Series。

如果您希望指定新行的名称(“索引”),请使用:

[SESSION]
BeginString=FIX.4.3
SenderCompID=FIX_STP_SENDER
TargetCompID=FIX_STP_PUBLISHER
StartTime=05:30:00
EndTime=21:45:00
UseLocalTime=N
SocketConnectPort=55555
SocketConnectHost=192.168.104.78
HeartBtInt=60
SessionQualifier=TRADESTP
UseDataDictionary=N

如果您不希望为新行命名,请使用:

df.append(pandas.Series(name='NameOfNewRow'))

其中df.append(pandas.Series(), ignore_index=True) 是您的pandas.DataFrame。

答案 2 :(得分:3)

以下代码对我有用。

"faxEnabled" => "true", 
"areaCode" => $areacode

答案 3 :(得分:2)

您可以添加一个新系列,并同时命名。名称将是新行的索引,所有值将自动为NaN。

system.build.start.date

答案 4 :(得分:1)

假设df是您的数据框,

df_prime = pd.concat([df, pd.DataFrame([[np.nan] * df.shape[1]], columns=df.columns)], ignore_index=True)

其中df_prime等于df,并加上NaN的最后一行。

请注意,pd.concat的运行速度很慢,因此如果您需要循环使用此功能,则最好避免使用它。 在这种情况下,假设您的索引是增量索引,则可以使用

df_prime = df.loc[df.iloc[-1].name + 1,:] = np.nan

答案 5 :(得分:1)

将“空”行附加到数据框并填充所选单元格:

生成空数据帧(没有行,只有列ab):

import pandas as pd    
col_names =  ["a","b"]
df  = pd.DataFrame(columns = col_names)

在数据框的 end 处添加空行:

df = df.append(pd.Series(), ignore_index = True)

现在在len(df)-1列的数据帧末尾(a)处填充空白单元格:

df.loc[[len(df)-1],'a'] = 123

结果:

     a    b
0  123  NaN

当然,可以遍历行并填充单元格:

col_names =  ["a","b"]
df  = pd.DataFrame(columns = col_names)
for x in range(0,5):
    df = df.append(pd.Series(), ignore_index = True)
    df.loc[[len(df)-1],'a'] = 123

结果:

     a    b
0  123  NaN
1  123  NaN
2  123  NaN
3  123  NaN
4  123  NaN

答案 6 :(得分:0)

假设您的df.index已排序,则可以使用:

df.loc[df.index.max() + 1] = None

它处理完全不同的索引和列类型。

[EDIT]如果频率恒定,则可与pd.DatetimeIndex配合使用,否则我们必须准确地指定新索引,例如:

df.loc[df.index.max() + pd.Timedelta(milliseconds=1)] = None

长例子:

df = pd.DataFrame([[pd.Timestamp(12432423), 23, 'text_field']], 
                    columns=["timestamp", "speed", "text"],
                    index=pd.DatetimeIndex(start='2111-11-11',freq='ms', periods=1))
df.info()

<class 'pandas.core.frame.DataFrame'> DatetimeIndex: 1 entries, 2111-11-11 to 2111-11-11 Freq: L Data columns (total 3 columns): timestamp 1 non-null datetime64[ns] speed 1 non-null int64 text 1 non-null object dtypes: datetime64[ns](1), int64(1), object(1) memory usage: 32.0+ bytes

df.loc[df.index.max() + 1] = None
df.info()

<class 'pandas.core.frame.DataFrame'> DatetimeIndex: 2 entries, 2111-11-11 00:00:00 to 2111-11-11 00:00:00.001000 Data columns (total 3 columns): timestamp 1 non-null datetime64[ns] speed 1 non-null float64 text 1 non-null object dtypes: datetime64[ns](1), float64(1), object(1) memory usage: 64.0+ bytes

df.head()

                            timestamp                   speed      text
2111-11-11 00:00:00.000 1970-01-01 00:00:00.012432423   23.0    text_field
2111-11-11 00:00:00.001 NaT NaN NaN

答案 7 :(得分:0)

您还可以使用:

SqlBulkCopy

其中your_dataframe.insert(loc=0, value=np.nan, column="") 是您的空行索引。