我在一个文件夹中有几个csv文件,我想在一个数据框中打开它们并插入一个带有相关文件名的新列.到目前为止,我编写了以下代码:
import pandas as pd
import glob, os
df = pd.concat(map(pd.read_csv, glob.glob(os.path.join('path/*.csv'))))
df['filename']= os.path.basename(csv)
df
Run Code Online (Sandbox Code Playgroud)
这给了我想要的数据帧但是在新列'filename'中它只列出了每行的文件夹中的最后一个文件名.我正在寻找每一行用它的相关csv文件填充.不只是文件夹中的最后一个文件.
对这位新手的任何帮助都非常感谢.
我有一本字典。键是单词,值是这些单词出现的次数。
countDict = {'house': 2, 'who': 41, 'joey': 409, 'boy': 2, 'girl':2}
Run Code Online (Sandbox Code Playgroud)
我想找出有多少元素出现的值大于 1、值大于 20 和值大于 50。
我找到了这个代码
a = sum(1 for i in countDict if countDict.values() >= 2)
Run Code Online (Sandbox Code Playgroud)
但我得到一个错误,我猜这意味着字典中的值不能作为整数处理。
builtin.TypeError: unorderable types: dict_values() >= int()
Run Code Online (Sandbox Code Playgroud)
我尝试修改上面的代码使字典值为整数,但这也不起作用。
a = sum(1 for i in countDict if int(countDict.values()) >= 2)
builtins.TypeError: int() argument must be a string or a number, not 'dict_values'
Run Code Online (Sandbox Code Playgroud)
有什么建议?
我有一个像这样的字典设置:
deck = [{
'name': 'drew',
'lvl': 23,
'items': ['sword', 'axe', 'mana_potion']},
{
'name': 'john',
'lvl': 23,
'items': ['sword', 'mace', 'health_potion']}]
Run Code Online (Sandbox Code Playgroud)
这是一个基本示例,我需要一种方法来过滤(仅复制 {characters})匹配某些值,例如我只想要 23 级或携带剑的角色。
我正在考虑做这样的事情:
filtered = filter_deck(deck, 'mace')
def filter_deck(self, deck, filt):
return [{k:v for (k,v) in deck.items() if filt in k}]
Run Code Online (Sandbox Code Playgroud)
并返回:
filtered = [{
'name': 'john',
'lvl': 23,
'items': ['sword', 'mace', 'health_potion']}]
Run Code Online (Sandbox Code Playgroud)
当我不知道它是单个值还是值列表或如何过滤多个值时,我不确定如何过滤 k:v 或 k:[v1,v2,v3] 等特定项目。
我不确定如何使用多个键过滤字符。假设我想筛选出 23 级的角色,或者有 items['sword'] 或 items['mace'] 的角色。我怎样才能让它排序filter_cards(deck, ['lvl'=23, 'items'=['sword','mace'])
因此,如果任何角色达到 23 级,或者携带狼牙棒或剑,他们就会出现在该列表中。
我有一个大文本文件,看起来像:
1 27 21 22
1 151 24 26
1 48 24 31
2 14 6 8
2 98 13 16
.
.
.
Run Code Online (Sandbox Code Playgroud)
我想用它创建一个字典。每个列表的第一个数字应该是字典中的键,并且应该采用以下格式:
{1: [(27,21,22),(151,24,26),(48,24,31)],
2: [(14,6,8),(98,13,16)]}
Run Code Online (Sandbox Code Playgroud)
我有以下代码(总分是文本文件第一列中的最大数字(即字典中的最大键)):
from collections import defaultdict
info = defaultdict(list)
filetxt = 'file.txt'
i = 1
with open(filetxt, 'r') as file:
for i in range(1, num_cities + 1):
info[i] = 0
for line in file:
splitLine = line.split()
if info[int(splitLine[0])] == 0:
info[int(splitLine[0])] = ([",".join(splitLine[1:])])
else:
info[int(splitLine[0])].append((",".join(splitLine[1:])))
Run Code Online (Sandbox Code Playgroud)
哪个输出
{1: ['27,21,22','151,24,26','48,24,31'],
2: ['14,6,8','98,13,16']}
Run Code Online (Sandbox Code Playgroud)
我想做这本字典的原因是因为我想对给定键的字典的每个“内部列表”运行 …
因此,使用分割列表itertools.groupby()
相当容易.
>>> import itertools as it
>>> iterable = it.groupby([1, 2, 3, 4, 5, 2, 3, 4, 2], lambda p: p==2)
>>> for x, y in iterable:
... print(x, list(y))
... next(iterable)
False [1]
False [3, 4, 5]
False [3, 4]
Run Code Online (Sandbox Code Playgroud)
按预期工作.但是使用常见的python习惯用法zip
多次迭代迭代器,一次只能逐步完成2,这似乎打破了局面.
>>> iterable = it.groupby([1, 2, 3, 4, 5, 2, 3, 4, 2], lambda p: p==2)
>>> for (x, y), _ in zip(iterable, iterable):
... print(x, list(y))
False []
False []
False []
Run Code Online (Sandbox Code Playgroud)
添加一个print(y) …
我正在尝试编写一个需要连接到Firebase的python脚本。我已经安装了python-firebase软件包,但是当我使用“ import firebase”将其导入程序时,出现以下错误:
Traceback (most recent call last):
File "C:\Users\hajel\AppData\Local\Programs\Python\Python37-32\Scripts\RFIDHandler.py", line 1, in <module>
import firebase
File "C:\Users\hajel\AppData\Local\Programs\Python\Python37-32\lib\site-packages\firebase\__init__.py", line 3
from .async import process_pool
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud) 我有一个接受可变长度参数的函数,如下所述。我正在通过kwargs
字典。但是我不明白为什么我得到了错误。
class PanSearch(object):
otp_wait = 30
def __init__(self, surname, dob, mobile_no, otp_host, **kwargs):
kwargs.setdefault('browser', 'chromium')
self.surname = surname
self.dob = dob
self.mobile_no = mobile_no
self.otp_host = otp_host
self.middle_name = kwargs.get('middle_name', None)
self.first_name = kwargs.get('first_name', None)
self.status = kwargs.get('status')
self.gender = 'M' if kwargs.get('status') == 'P' else None
# instantiating the object
otp_host = 'abc.xyz.in'
input_kwargs = {'status': 'P', 'gender': 'M', 'browser': 'chromium'}
driver = PanSearch(surname='kulkarni', dob='13/10/1981', mobile_no='9769172006', otp_host, **input_kwargs)
File "pan_no.py", line 87
driver = PanSearch(surname='kulkarni', dob='13/10/1981', mobile_no='9769172006', …
Run Code Online (Sandbox Code Playgroud) 我一直在浏览 Stack 和整个互联网,但找不到我正在处理的问题。我是 Python 新手,正在学习类的工作方式。我已经编写了一个非常简单的类和函数来将它打印到控制台。
class Car():
def __intit__(self, make, model, year):
self.make = make
self.model = model
self.year = year
def get_descriptive_name(self):
long_name = str(self.year), + " " + self.make + " " + self.model
return long_name.title()
my_new_car = Car('Chevy', 'sonic', 2015)
print(my_new_car.get_descriptive_name())
Run Code Online (Sandbox Code Playgroud)
但是当我运行编译器时,它返回错误 Car() 不带参数。我知道需要 self 参数,并且我已经将它们包含在我能想到的所有区域中。我已经做了很多实验,我没有尝试改变它。我希望有人可以向我解释这一点,或者可能知道相关主题?
在此先感谢您的帮助!
我使用以下脚本:
tagRequest = requests.get("https://api.instagram.com/v1/tags/" + tag + "/media/recent?client_id=" + clientId)
tagData = json.loads(tagRequest.text)
tagId = tagData["data"][0]["user"]["id"]
for i in tagData["data"]:
print tagData["data"][i]
Run Code Online (Sandbox Code Playgroud)
我的脚本应该迭代JSON对象tagData.(在"数据"中的所有内容.)但是,我收到以下错误:list indices must be integers, not dict.
我安装了Tor作为我的Windows机器上的服务运行,我试图通过Stem包在python中发出请求.在我的torrc文件中,我将ControlPort指定为9051并设置了HashedControlPassword.当我运行netstat时,我看到Tor在localhost:9050上运行,但没有任何东西正在侦听端口9051.因此,当我尝试连接到python中的ControlPort时:
Controller.from_port(port=9051)
Run Code Online (Sandbox Code Playgroud)
结果是
[Errno 10061] No connection could be made because the target machine actively refused it
Run Code Online (Sandbox Code Playgroud)
我尝试重新启动服务,我甚至重新安装了Tor浏览器,但似乎没有什么能让ControlPort工作.
python ×10
dictionary ×3
python-3.x ×2
class ×1
csv ×1
filtering ×1
firebase ×1
for-loop ×1
glob ×1
integer ×1
list ×1
pandas ×1
stem ×1
syntax-error ×1
tor ×1