library(rjson)
filenames <- list.files(pattern="*.json") # gives a character vector, with each file name represented by an entry
Run Code Online (Sandbox Code Playgroud)
现在,我想将所有JSON文件作为一个dataFrame导入到R中。我怎么做?
我第一次尝试
myJSON <- lapply(filenames, function(x) fromJSON(file=x)) # should return a list in which each element is one of the JSON files
Run Code Online (Sandbox Code Playgroud)
但是上面的代码要花一些时间才能终止,因为我有15,000个文件,而且我知道它不会返回单个数据帧。有更快的方法吗?
样本JSON文件:
{"Reviews": [{"Ratings": {"Service": "4", "Cleanliness": "5"}, "AuthorLocation": "Boston", "Title": "\u201cExcellent Hotel & Location\u201d", "Author": "gowharr32", "ReviewID": "UR126946257", "Content": "We enjoyed the Best Western Pioneer Square....", "Date": "March 29, 2012"}, {"Ratings": {"Overall": "5"},"AuthorLocation": "Chicago",....},{...},....}]}
Run Code Online (Sandbox Code Playgroud) 我正在设置以下示例,它类似于我的情况和数据:
说,我有以下DataFrame:
df = pd.DataFrame ({'ID' : [1,2,3,4],
'price' : [25,30,34,40],
'Category' : ['small', 'medium','medium','small']})
Run Code Online (Sandbox Code Playgroud)
Category ID price
0 small 1 25
1 medium 2 30
2 medium 3 34
3 small 4 40
Run Code Online (Sandbox Code Playgroud)
现在,我有以下功能,它根据以下逻辑返回折扣金额:
def mapper(price, category):
if category == 'small':
discount = 0.1 * price
else:
discount = 0.2 * price
return discount
Run Code Online (Sandbox Code Playgroud)
现在我想要生成的DataFrame:
Category ID price Discount
0 small 1 25 0.25
1 medium 2 30 0.6
2 medium 3 40 0.8
3 small 4 40 0.4 …Run Code Online (Sandbox Code Playgroud) 我有一组输入。我正在尝试编写一个正则表达式来匹配输入中的以下模式:
天在时间上的位置
示例输入:
今天,在下午12:30在Sam的客厅
文本的粗体部分在每个输入中都不同。
我写了以下正则表达式:
import regex as re
input_example = "Today at 12:30 PM on Rakesh's Echo"
regexp_1 = re.compile(r'(\w+) at (\d+):(\d+) (\w+) on (\w+)')
re_match = regexp_1.match(input_example)
Run Code Online (Sandbox Code Playgroud)
哪个有效,我正在匹配正确的模式。我现在试图从模式中提取组。
我想要的输出是:
re_match.group(1)
>> "Today"
re_match.group(2)
>> "12:30 PM"
re_match.group(3)
>> "Sam's living room"
Run Code Online (Sandbox Code Playgroud)
但是,我当前的正则表达式匹配没有给我这个输出。什么是正确的正则表达式,可以给我上述输出?
当我运行脚本:从cmd安装python setup.py时,我收到以下错误消息:
ImportError:没有名为sklearn._build_utils的模块
安装后:
假设我有以下DataFrame:
A | B
1 | Ms
1 | PhD
2 | Ms
2 | Bs
Run Code Online (Sandbox Code Playgroud)
我想删除关于A列的重复行,并且我想保留B列中值为'PhD'的行作为原始行,如果我没有找到'PhD',我想保留行B栏中的"B".
我正在尝试使用
df.drop_duplicates('A')
Run Code Online (Sandbox Code Playgroud)
有条件的
我有以下DataFrame:
+----------+
| date|
+----------+
|2017-01-25|
|2017-01-21|
|2017-01-12|
+----------+
Run Code Online (Sandbox Code Playgroud)
以下是DataFrame上面创建的代码:
import pyspark.sql.functions as f
rdd = sc.parallelize([("2017/11/25",), ("2017/12/21",), ("2017/09/12",)])
df = sqlContext.createDataFrame(rdd, ["date"]).withColumn("date", f.to_date(f.col("date"), "yyyy/MM/dd"))
df.show()
Run Code Online (Sandbox Code Playgroud)
我想要一个新列,每行的第一个日期,只需在所有日期将日期替换为"01"
+----------++----------+
| date| first_date|
+----------++----------+
|2017-11-25| 2017-11-01|
|2017-12-21| 2017-12-01|
|2017-09-12| 2017-09-01|
+----------+-----------+
Run Code Online (Sandbox Code Playgroud)
PySpark.sql.function中有一个last_day函数,但是没有first_day函数.
我尝试使用date_sub执行此操作但不起作用:我得到一个列而不是Iterable错误,因为date_sub的第二个参数不能是一个列而必须是一个整数.
f.date_sub(f.col('date'), f.dayofmonth(f.col('date')) - 1 )
Run Code Online (Sandbox Code Playgroud) 在我的终端中我正在运行:
curl --user dhelm:12345 \https://stream.twitter.com/1.1/statuses/sample.json > raw-data.txt
Run Code Online (Sandbox Code Playgroud)
curl 的输出是实时流式 Twitter 数据,该数据正在写入文件 raw-data.txt
在Python中,
import json
posts = []
for line in open("/Users/me/raw-data.txt"):
try:
posts.append(json.loads(line))
except:
pass
Run Code Online (Sandbox Code Playgroud)
我正在 python 中读取文件并使用 json 解码器并将结果附加到帖子中。
现在,问题是我不希望我的程序在 python 脚本到达文件末尾时结束。相反,当我的终端上运行的curl 将更多帖子附加到文件raw-data.txt 时,我想继续阅读。
DataFrame df有一个名为amount的列
import pandas as pd
df = pd.DataFrame(['$3,000,000.00','$3,000.00', '$200.5', '$5.5'], columns = ['Amount'])
Run Code Online (Sandbox Code Playgroud)
DF:
ID | Amount
0 | $3,000,000.00
1 | $3,000.00
2 | $200.5
3 | $5.5
Run Code Online (Sandbox Code Playgroud)
我想解析列量中的所有值并将数量提取为数字并忽略小数点.最终结果是DataFrame,如下所示:
ID | Amount
0 | 3000000
1 | 3000
2 | 200
3 | 5
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?
我有一个以这种方式格式化的文本文件:
A00 0010 00000
A001 0011 00000
A00911 0019 00000
A0100 0020 10000
Run Code Online (Sandbox Code Playgroud)
我想将此文件读入DataFrame.所以我尝试过:
import pandas as pd
path = *file path*
df = pd.read_csv(path, sep = '\t', header = None)
Run Code Online (Sandbox Code Playgroud)
我得到的是一个包含4行和1列的DataFrame.
0
0 A00 0010 00000
1 A001 0011 00000
2 A00911 0019 00000
3 A0100 0020 10000
[4 rows x 1 columns]
Run Code Online (Sandbox Code Playgroud)
这是因为值不是由"\ t"分隔的.列之间的空格数在每行中有所不同,具体取决于字符串的长度.
所需的DataFrame应该有四行三列.
0 1 2
0 A000 0010 00000
1 A001 0011 00000
2 A009 0019 00000
3 A0100 0020 10000
[4 rows x 3 …Run Code Online (Sandbox Code Playgroud) python ×9
pandas ×5
dataframe ×3
apache-spark ×1
curl ×1
file ×1
json ×1
numpy ×1
pyspark ×1
python-2.7 ×1
r ×1
regex ×1
scikit-learn ×1