我知道pandas旨在加载完全填充DataFrame但我需要创建一个空的DataFrame,然后逐个添加行.做这个的最好方式是什么 ?
我成功创建了一个空的DataFrame:
res = DataFrame(columns=('lib', 'qty1', 'qty2'))
Run Code Online (Sandbox Code Playgroud)
然后我可以添加一个新行并填充一个字段:
res = res.set_value(len(res), 'qty1', 10.0)
Run Code Online (Sandbox Code Playgroud)
它工作但似乎很奇怪: - /(它添加字符串值失败)
如何向我的DataFrame添加新行(具有不同的列类型)?
我有一个这样的词典列表:
[{'points': 50, 'time': '5:00', 'year': 2010},
{'points': 25, 'time': '6:00', 'month': "february"},
{'points':90, 'time': '9:00', 'month': 'january'},
{'points_h1':20, 'month': 'june'}]
Run Code Online (Sandbox Code Playgroud)
我想把它变成DataFrame像这样的熊猫:
month points points_h1 time year
0 NaN 50 NaN 5:00 2010
1 february 25 NaN 6:00 NaN
2 january 90 NaN 9:00 NaN
3 june NaN 20 NaN NaN
Run Code Online (Sandbox Code Playgroud)
注意:列的顺序无关紧要.
如何将字典列表转换为pandas DataFrame,如上所示?
我试图将字典附加到 DataFrame 对象,但出现以下错误:
AttributeError:“DataFrame”对象没有属性“append”
据我所知,DataFrame确实有“append”方法。
代码片段:
df = pd.DataFrame(df).append(new_row, ignore_index=True)
Run Code Online (Sandbox Code Playgroud)
我期待字典new_row被添加为新行。
我该如何修复它?
是否可以附加到不包含任何索引或列的空数据框?
我试图这样做,但最后继续得到一个空的数据帧.
例如
df = pd.DataFrame()
data = ['some kind of data here' --> I have checked the type already, and it is a dataframe]
df.append(data)
Run Code Online (Sandbox Code Playgroud)
结果如下:
Empty DataFrame
Columns: []
Index: []
Run Code Online (Sandbox Code Playgroud) 如何将单个项目添加到序列化的熊猫系列中.我知道这不是最有效的记忆方式,但我仍然需要这样做.
一些东西:
>> x = Series()
>> N = 4
>> for i in xrange(N):
>> x.some_appending_function(i**2)
>> print x
0 | 0
1 | 1
2 | 4
3 | 9
Run Code Online (Sandbox Code Playgroud)
另外,我如何向pandas DataFrame添加一行?
在pandas库中很多次都有一个选项来更改对象,例如使用以下语句...
df.dropna(axis='index', how='all', inplace=True)
Run Code Online (Sandbox Code Playgroud)
我很好奇返回的内容以及inplace=True传递对象时的处理方式inplace=False.
正在修改的所有操作self时inplace=True?什么时候inplace=False立即创建一个新对象new_df = self,然后new_df返回?
这是我正在运行的代码的一个简单示例,我希望将结果放入pandas数据帧(除非有更好的选项):
for p in game.players.passing():
print p, p.team, p.passing_att, p.passer_rating()
R.Wilson SEA 29 55.7
J.Ryan SEA 1 158.3
A.Rodgers GB 34 55.8
Run Code Online (Sandbox Code Playgroud)
使用此代码:
d = []
for p in game.players.passing():
d = [{'Player': p, 'Team': p.team, 'Passer Rating':
p.passer_rating()}]
pd.DataFrame(d)
Run Code Online (Sandbox Code Playgroud)
我可以得到:
Passer Rating Player Team
0 55.8 A.Rodgers GB
Run Code Online (Sandbox Code Playgroud)
这是一个1x3数据帧,我理解为什么它只有一行,但我无法弄清楚如何使列以正确的顺序排列多行.理想情况下,该解决方案能够处理n行(基于p),如果列数将根据请求的统计数设置,那将是很好的(尽管不是必需的).有什么建议?提前致谢!
我想创建一个充满NaN的Pandas DataFrame.在我的研究期间,我找到了答案:
import pandas as pd
df = pd.DataFrame(index=range(0,4),columns=['A'])
Run Code Online (Sandbox Code Playgroud)
此代码导致DataFrame填充了"object"类型的NaN.因此,以后不能使用它们,例如使用该interpolate()方法.因此,我使用这个复杂的代码创建了DataFrame(灵感来自这个答案):
import pandas as pd
import numpy as np
dummyarray = np.empty((4,1))
dummyarray[:] = np.nan
df = pd.DataFrame(dummyarray)
Run Code Online (Sandbox Code Playgroud)
这导致DataFrame填充了"float"类型的NaN,因此可以在以后使用它interpolate().是否有更优雅的方式来创建相同的结果?
Pandas 操作通常会创建原始数据帧的副本。正如 SO 上的一些答案指出的那样,即使在使用时inplace=True,许多操作仍然会创建一个副本来进行操作。
现在,如果我告诉我的同事,每次我想要申请+2一个列表时,我都会在做之前复制整个内容,我想我会被称为疯子。然而,这就是 Pandas 所做的。即使是简单的操作(例如追加)也会重新分配整个数据帧。
必须在每个操作中重新分配和复制所有内容似乎是对任何数据进行操作的非常低效的方法。它还使得无法对特别大的数据帧进行操作,即使它们适合您的 RAM。
此外,这对于 Pandas 开发者或用户来说似乎不是问题,以至于有一个开放的问题 #16529 讨论完全删除该inplace参数,该问题得到了大部分积极的回应;有些从 1.0 开始就被弃用了。好像我错过了一些东西。那么,我错过了什么?
始终在操作上复制数据帧而不是尽可能就地执行它们有什么优点?
注意:我同意方法链接非常简洁,我一直使用它。然而,我觉得“因为我们可以方法链”并不是完整的答案,因为 Pandas 有时甚至在inplace=True方法中进行复制,而这些方法并不意味着被链接。因此,我正在寻找其他一些答案来了解为什么这是一个合理的默认值。
我想创建一个带有单行的python pandas DataFrame,以使用进一步的pandas功能,如转储到*.csv.
我已经看到使用了以下代码,但我最终只得到列结构,但是空数据
import pandas as pd
df = pd.DataFrame()
df['A'] = 1
df['B'] = 1.23
df['C'] = "Hello"
df.columns = [['A','B','C']]
print df
Empty DataFrame
Columns: [A, B, C]
Index: []
Run Code Online (Sandbox Code Playgroud)
虽然我知道还有其他方法可以做到这一点(比如来自字典),但我想了解为什么这段代码对我不起作用!?这是版本问题吗?(使用pandas == 0.19.2)
我有附加数据帧的问题.我尝试执行此代码
df_all = pd.read_csv('data.csv', error_bad_lines=False, chunksize=1000000)
urls = pd.read_excel('url_june.xlsx')
substr = urls.url.values.tolist()
df_res = pd.DataFrame()
for df in df_all:
for i in substr:
res = df[df['url'].str.contains(i)]
df_res.append(res)
Run Code Online (Sandbox Code Playgroud)
当我尝试保存时,df_res我得到空的数据帧.
df_all好像
ID,"url","used_at","active_seconds"
b20f9412f914ad83b6611d69dbe3b2b4,"mobiguru.ru/phones/apple/comp/32gb/apple_iphone_5s.html",2015-10-01 00:00:25,1
b20f9412f914ad83b6611d69dbe3b2b4,"mobiguru.ru/phones/apple/comp/32gb/apple_iphone_5s.html",2015-10-01 00:00:31,30
f85ce4b2f8787d48edc8612b2ccaca83,"4pda.ru/forum/index.php?showtopic=634566&view=getnewpost",2015-10-01 00:01:49,2
d3b0ef7d85dbb4dbb75e8a5950bad225,"shop.mts.ru/smartfony/mts/smartfon-smart-sprint-4g-sim-lock-white.html?utm_source=admitad&utm_medium=cpa&utm_content=300&utm_campaign=gde_cpa&uid=3",2015-10-01 00:03:19,34
078d388438ebf1d4142808f58fb66c87,"market.yandex.ru/product/12675734/spec?hid=91491&track=char",2015-10-01 00:03:48,2
d3b0ef7d85dbb4dbb75e8a5950bad225,"avito.ru/yoshkar-ola/telefony/mts",2015-10-01 00:04:21,4
d3b0ef7d85dbb4dbb75e8a5950bad225,"shoppingcart.aliexpress.com/order/confirm_order",2015-10-01 00:04:25,1
d3b0ef7d85dbb4dbb75e8a5950bad225,"shoppingcart.aliexpress.com/order/confirm_order",2015-10-01 00:04:26,9
Run Code Online (Sandbox Code Playgroud)
和urls看起来像
url
shoppingcart.aliexpress.com/order/confirm_order
ozon.ru/?context=order_done&number=
lk.wildberries.ru/basket/orderconfirmed
lamoda.ru/checkout/onepage/success/quick
mvideo.ru/confirmation?_requestid=
eldorado.ru/personal/order.php?step=confirm
Run Code Online (Sandbox Code Playgroud)
当我res在循环中打印时,它不会为空.但是当我df_res在追加后尝试在循环中打印时,它返回空数据帧.我找不到我的错误.我该如何解决?
我需要创建一个大型数据框来保存我的数据。它有 30001 列,1000 行。对于数据类型,30000列是int64,最后一列是哈希值。
所以我首先创建一个空数据框:
df = pd.DataFrame(columns=columnNames, data=np.empty(shape=(1000, 30001)))
Run Code Online (Sandbox Code Playgroud)
然后我根据数据框的列创建一个系列:
record = pd.Series(index=df.columns)
Run Code Online (Sandbox Code Playgroud)
然后在循环中我将填充记录并将它们分配给数据框:
loop:
record[0:30000] = values #fill record with values
record['hash']= hash_value
df.loc[index] = record <==== this is slow
index += 1
Run Code Online (Sandbox Code Playgroud)
当我调试代码时,我发现上述将记录分配给行的步骤非常慢。
我的猜测是,如果我可以创建一个具有精确预分配大小的数据框,那么将记录分配给每一行将会快得多。
那么我可以创建预分配全尺寸的数据框吗?
(注意:我的原始数据框没有“哈希”列,它运行时没有任何性能问题。最近我发现我需要这个额外的哈希列,它是一个字符串值。并且这个性能问题在添加这个新列之后发生)
我正在尝试创建一个 python 函数来绘制 DataFrame 中的数据。参数应该只是数据。或者数据和标准差。
作为标准差的默认参数,我想使用一个空的 DataFrame。
def plot_average(avg_df, stdev=pd.DataFrame()):
if not stdev.empty:
...
...
Run Code Online (Sandbox Code Playgroud)
但像这样实现它会给我以下错误消息:
TypeError: 'module' object is not callable
Run Code Online (Sandbox Code Playgroud)
如何创建一个空的 DataFrame 作为默认参数?