我经常使用以下方法将单行附加到数据帧。我真正喜欢它的一件事是它允许您附加一个简单的 dict 对象。例如:
# Creating an empty dataframe
df = pd.DataFrame(columns=['a', 'b'])
# Appending a row
df = df.append({ 'a': 1, 'b': 2 }, ignore_index=True)
Run Code Online (Sandbox Code Playgroud)
同样,我最喜欢的一点是代码非常干净并且只需要很少的行。现在我想推荐的替代方案是:
# Create the new row as its own dataframe
df_new_row = pd.DataFrame({ 'a': [1], 'b': [2] })
df = pd.concat([df, df_new_row])
Run Code Online (Sandbox Code Playgroud)
因此,之前的一行代码现在变成了两行,其中包含一个一次性变量和额外的内容,我在其中创建新的数据框。:( 有没有一种好方法可以做到这一点,只需使用像我过去那样的字典(未弃用)?
我肯定在这里遗漏了一些简单的东西.尝试在大多数具有相同列名的pandas中合并两个数据帧,但右侧数据框有一些左侧没有的列,反之亦然.
>df_may
id quantity attr_1 attr_2
0 1 20 0 1
1 2 23 1 1
2 3 19 1 1
3 4 19 0 0
>df_jun
id quantity attr_1 attr_3
0 5 8 1 0
1 6 13 0 1
2 7 20 1 1
3 8 25 1 1
Run Code Online (Sandbox Code Playgroud)
我尝试加入外连接:
mayjundf = pd.DataFrame.merge(df_may, df_jun, how="outer")
Run Code Online (Sandbox Code Playgroud)
但那会产生:
Left data columns not unique: Index([....
Run Code Online (Sandbox Code Playgroud)
我还指定了一个要加入的列(on ="id",例如),但是复制除"id"之外的所有列,如attr_1_x,attr_1_y,这是不理想的.我还将整个列列表(有很多)传递给"on":
mayjundf = pd.DataFrame.merge(df_may, df_jun, how="outer", on=list(df_may.columns.values))
Run Code Online (Sandbox Code Playgroud)
产量:
ValueError: Buffer has wrong number of dimensions …Run Code Online (Sandbox Code Playgroud) 我正在做一些数据修改,如果我可以在内存数据库中粘贴一堆字典,然后对它进行简单的查询,那将会更加简单.
例如,类似于:
people = db([
{"name": "Joe", "age": 16},
{"name": "Jane", "favourite_color": "red"},
])
over_16 = db.filter(age__gt=16)
with_favorite_colors = db.filter(favorite_color__exists=True)
Run Code Online (Sandbox Code Playgroud)
但有三个混淆因素:
那么,这样的事情存在吗?或者我需要一起解决问题吗?
我需要从我读过的CSV文件中划分空格
import csv
aList=[]
with open(self.filename, 'r') as f:
reader = csv.reader(f, delimiter=',', quoting=csv.QUOTE_NONE)
for row in reader:
aList.append(row)
# I need to strip the extra white space from each string in the row
return(aList)
Run Code Online (Sandbox Code Playgroud) 我需要将日期转换为Excel序列号,以用于我正在编写的数据修改脚本.通过在我的OpenOffice Calc工作簿中播放日期,我能够推断出'1-Jan 1899 00:00:00'映射到数字零.
我编写了以下函数来将python datetime对象转换为Excel序列号:
def excel_date(date1):
temp=dt.datetime.strptime('18990101', '%Y%m%d')
delta=date1-temp
total_seconds = delta.days * 86400 + delta.seconds
return total_seconds
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试一些示例日期时,数字与我在Excel中格式化日期时所获得的数字不同(以及OpenOffice Calc).例如,测试'2009-03-20'在Python中给出3478032000,而excel将序列号呈现为39892.
上面的公式出了什么问题?
*注意:我使用的是Python 2.6.3,因此无法访问datetime.total_seconds()
九年前,当我开始使用Perl解析HTML和自由文本时,我阅读了Perl的经典Data Munging.有人知道大卫是否打算更新这本书,或者是否有类似的书籍或网页,其中解释了像XML-Twig,Regexp-Grammars等新的解析模块?
我假设在过去的九年中,一些模块仍然和它们一样好,有些模块是最新的,但有一些新的有趣方法,有些还有更好的替代方法.例如,Parse-RecDescent仍然是自由文本解析的唯一选择,还是Perl 6影响的Regexp-Grammars在许多场景中的替代?
我已经四年没有使用Perl进行有效的HTML,XML或自由文本数据挖掘了,所以我这个领域的工具包可能有点过时了.因此,对于与该领域当前CPAN模块最新的人员而言,HTML和DOM操作,链接提取/验证,Web测试(如Mechanize,XML操作和自由文本解析)的任何反馈都将受到欢迎.
我的工具包的一些新增内容:
还在我的工具箱中:
我是Python的新手,并且已经通过几本书来解决它.除了可视化之外,一切都很棒.我真的不喜欢matplotlib和Bokeh需要太重的堆栈.
我想要的工作流程是:
使用ipython笔记本中的pandas进行数据分析 - >使用sublimetext2中的d3进行可视化
但是,作为Python和d3的新手,我不知道将我的pandas数据框导出到d3的最佳方法.我应该把它作为csv吗?JSON?还是有更直接的方式?
附带问题:是否有任何(合理的)方法在ipython笔记本中执行所有操作而不是切换到sublimetext?
任何帮助,将不胜感激.
我在进行基本数据调整时遇到了这种行为,如下例所示:
In [55]: import pandas as pd
In [56]: import numpy as np
In [57]: rng = pd.date_range('1/1/2000', periods=10, freq='4h')
In [58]: lvls = ['A','A','A','B','B','B','C','C','C','C']
In [59]: df = pd.DataFrame({'TS': rng, 'V' : np.random.randn(len(rng)), 'L' : lvls})
In [60]: df
Out[60]:
L TS V
0 A 2000-01-01 00:00:00 -1.152371
1 A 2000-01-01 04:00:00 -2.035737
2 A 2000-01-01 08:00:00 -0.493008
3 B 2000-01-01 12:00:00 -0.279055
4 B 2000-01-01 16:00:00 -0.132386
5 B 2000-01-01 20:00:00 0.584091
6 C 2000-01-02 00:00:00 -0.297270
7 …Run Code Online (Sandbox Code Playgroud) 如何删除python中的变量以清除python中的ram内存?
[R :
a = 2
rm(a)
Run Code Online (Sandbox Code Playgroud)
蟒蛇:
a= 2
Run Code Online (Sandbox Code Playgroud)
如何清除单个变量或一组变量?
我有数据框:
subject A_target_word_gd A_target_word_fd B_target_word_gd B_target_word_fd subject_type
1 1 2 3 4 mild
2 11 12 13 14 moderate
Run Code Online (Sandbox Code Playgroud)
我想将其融合为一个数据框,如下所示:
cond subject subject_type value_type value
A 1 mild gd 1
A 1 mild fg 2
B 1 mild gd 3
B 1 mild fg 4
A 2 moderate gd 11
A 2 moderate fg 12
B 2 moderate gd 13
B 2 moderate fg 14
...
...
Run Code Online (Sandbox Code Playgroud)
意思是,根据列名称的分隔符来融化。
最好的方法是什么?
data-munging ×10
python ×7
pandas ×5
dataframe ×3
csv ×1
d3.js ×1
data-science ×1
database ×1
datetime ×1
excel ×1
html-parsing ×1
ipython ×1
melt ×1
perl ×1
r ×1
text-parsing ×1
timestamp ×1
xml-parsing ×1